Commits

Anonymous committed e54c090

Comments (0)

Files changed (1)

+#GeMI
+
+##Gestor de Múltiples Idiomas (Multiple Language Manager)
+
+----
+###Presentation
+This module provides:
+
+ - Language Selector
+ - CRUD or Languages (Idiomas model). NOTE: Delete operation is a soft delete.
+ - Collects hardcoded strings written with Yii:t(), store them in a table allowing later translation.
+
+----
+###Installation
+Copy'gemi' folder inside 'modules'. Or well, Create a folder, named 'gemi', inside protected/modules and donwload inside the source code from [repository](https://bitbucket.org/dgeaperez/gemi/).
+
+Copy (or simlink ) the file BeginRequest.php in the folder components. If there an existant file, adapt it to include provided source code.
+
+If you have installed EUpdateDialog, this step is not needed:
+Copy (or simlink ) the folder EUpdateDialog from modules/extensions to protected/extensions. 
+ 
+Edit config/main.php:
+
+	//Forces source language never exists
+	'sourceLanguage' => '¡¡',
+	'language' => 'es',
+ 
+ 	'import'=>array(
+  	    'application.models.*',
+	    'application.modules.gemi.models.*',
+ 	 ),
+
+ 	// Asociates the behavior class with onBeginRequest event.
+	// Set in the primary array affects to the whole application
+	// In this case, changes the selected language of the application
+	'behaviors' => array(
+	    'onBeginRequest' => array(
+	        'class' => 'application.components.BeginRequest'
+	    ),
+	),
+
+	'modules'=>array(
+	    ...
+	    'gemi'=>array(
+	        'mostrarTodos'=>true,     //showAll
+	        'mostrarInactivos'=>true, //showDeactivated
+	    ), 
+ 
+	'messages' => array(
+	    'class' => 'CDbMessageSource',
+	    'sourceMessageTable' => 'tbl_msgOriginal',
+	    'translatedMessageTable' => 'tbl_msgTraducido',
+	    'onMissingTranslation' => array('MensajeATraducir', 'load'),
+	),
+
+The tables are created "automagically".
+
+
+----
+####Configuracion
+#####mostrarTodos: (*showAll*)
+> Lists all the languages defined or only the activated ones.  
+> Possible values:  
+>> + true,  
+>> + false,  
+>> + a logic operation to be evaluated, i.e.:
+
+	"Yii::app()->user->checkAccess('Admin') || Yii::app()->user->checkAccess('UsuarioAvanzado')",
+
+#####mostrarInactivos: (*showDeactivated)
+> Lists all the languages not soft deleted.  
+> For instance, to test the transaltions before activate the language 
+> Possible values: 
+>> + true, 
+>> + false, 
+>> + a logic operation to be evaluated, i.e.:
+
+	!Yii::app()->user->checkAccess('Admin')  && !Yii::app()->user->checkAccess('UsuarioAvanzado')
+
+----
+###Implementation
+Add to the desidered menu this elements:
+
+	array('label' => Yii::t('int','Idiomas'), 'url' => array('/gemi/idioma/index')),
+	array('label' => Yii::t('int','Traducir'), 'url' => array('/gemi/msgTraducido/index')),
+
+To use the Language Manager and the Message Translator, respectivelly.
+
+All the strings to be translated MUST be
+
+	Yii::t('categoría', 'mensaje'[, número])
+
+To show the language selector, i.e.:
+
+> In protected/views/layout/main.php
+
+	<div  id="language-selector" style="float:right; margin:5px;">
+	  <?php 
+	    eval(Yii::app()->getModule('gemi')->mostrarSelector);
+	  ?>
+	</div>
+
+----
+###Notes:
+* A Language is ACTIVE when the flag idiActivo is true
+* A Language is DEACTIVE when the flag idiActivo is false
+* A Language is AVAILABLE when the flag idiBaja is null
+* A Language is UNAVAILABLE when the flag idiBaja is DATETIME
+* At this moment, the lenguage identification is ISO 639 (2 chars)
+* The field idiCodigo accepts 5 chars, as is indicated in ISO 3166-1 alfa-2 (es-ES, es-AR, etc) But will be considerated the 2 first chars.
+* The language code MUST BE ALLWAYS in lowercase.
+* If you want to allow only the users customization of the hardcoded strings, it is enough to not include the menu item gemi/idioma/index. At this moment this only aplies to spanish.
+
+----
+### Avaliable Functions
+To use the funtions provided you can do it in two ways:
+
+	$gemi = Yii::app()->getModule('gemi');
+	$gemi->function;
+
+Or:
+
+	Yii::app()->getModule('gemi')->function;
+
+#### mostrarTodos (*show All*)
+**Type:** Property  
+**Value:** true or false 
+**Explanation:** Evaluates the parameter configurated in main.php and returns *true/false*
+
+#### mostrarInactivos (*show Deactivated*)
+**Type:** Property  
+**Value:** true or false 
+**Explanation:** Evaluates the parameter configurated in main.php and returns *true/false*
+
+#### mostrarSelector (*show Selector*)
+**Type:** *magic getter*  
+**Value:** texto  
+**Explanation:** Returns a string to be evaluated and renders a mini form with the language selector. This will be affected for the porperty *mostrarTodos*  
+**Example:**
+
+	eval(Yii::app()->getModule('gemi')->mostrarSelector);
+
+**Observations:**  
+- It has its CSS style  
+- To Do: The CSS style can be customized or to be integrated to the CSS system file.
+
+#### listarIdiomaCompleto (*full list language*)
+**Tipo:** *magic getter*  
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas definidos en la tabla, independientemente de su baja lógica o estado activo  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$listaIdiomasCompleto = $gemi->listarIdiomasCompleto;
+	print_r($listaIdiomasCompleto);
+
+	$listaIdiomaCompleto[array]:
+		es => Español
+		fr => François
+		en => English
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+- Próximamente: debería entregar un arreglo con esta estructura
+
+	$listaIdiomasCompleto[array]:
+		es => Español, [activo], [sin baja lógica]
+		fr => François, [activo], [con baja lógica]
+		en => English, [inactivo], [sin baja lógica]
+
+#### listarIdiomasActivos
+**Tipo:** *magic getter*  
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas definidos en la tabla, cuyo estado es *activo*  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$listaIdiomasActivo = $gemi->listarIdiomasActivo;
+	print_r($listaIdiomasActivo);
+
+	$listaIdiomaActivo[array]:
+		es => Español
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+
+#### listarIdiomasInActivos
+**Tipo:** *magic getter*  
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas definidos en la tabla, cuyo estado es *no activo*  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$listaIdiomasInActivos = $gemi->listarIdiomasInActivos;
+	print_r($listaIdiomasInActivos);
+
+	$listaIdiomaActivo[array]:
+		en => English
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+
+#### listarIdiomasVigentes
+**Tipo:** *magic getter*  
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas definidos en la tabla, cuyo estado de baja es *nulo*  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$listaIdiomasVigentes = $gemi->listarIdiomasVigentes;
+	print_r($listaIdiomasVigentes);
+
+	$listaIdiomaActivo[array]:
+		es => Español
+		en => English
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+- Proximamente: quizá debería entregar un arreglo con esta estructura: 
+
+	$listaIdiomasVigentes[array]:
+		es => Español, [activo]
+		en => English, [no activo]
+
+#### listarIdiomasNoVigentes
+**Tipo:** *magic getter*  
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas definidos en la tabla, cuyo estado es *DATETIME*  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$listaIdiomasNoVigente = $gemi->listarIdiomasNoVigente;
+	print_r($listaIdiomasNoVigente);
+
+	$listaIdiomaNoVigentes[array]:
+		fr => François
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+- Proximamente: quizá debería entregar un arreglo con esta estructura: 
+
+	$listaIdiomasNoVigentes[array]:
+		fr => François, [activo] //fr estaba activo pero se dió de baja
+
+#### ListarIdiomasPersonalizado($sSQL)
+**Tipo:** *Función*  
+**Parámetro:** $sSQL
+**Valor:** arreglo  
+**Explicación:** Devuelve un arreglo con todos los idiomas que cumplan el criterio *where* que cumpla *$sSQL*  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$ListarIdiomasPersonalizado = $gemi->ListarIdiomasPersonalizado('idiActivo = 0');
+	print_r($ListarIdiomasPersonalizado);
+
+	$ListarIdiomasPersonalizado[array]:
+		en => English
+
+**Observaciones:**  
+- El nombre de los idiomas se sugiere que estén en el idioma original  
+- Proximamente: quizá debería entregar un arreglo con esta estructura: 
+
+	$ListarIdiomasPersonalizados[array]:
+		en => English, [activo], [sin baja lógica]
+
+#### idiomaPorDefecto
+**Tipo:** *magic getter*  
+**Valor:** cadena  
+**Explicación:** Devuelve una cadena con el idioma por defecto  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$idiomaPorDefecto = $gemi->idiomaPorDefecto;
+	print_r($idiomaPorDefecto);
+
+	$idiomaPorDefecto[string]: es
+
+**Observaciones:**  
+- Proximamente: quizá debería poder personalizarse el idioma por defecto a ingresar en la tabla.
+
+#### IdiomaEstaDisponible($sCodigoDeIdioma)
+**Tipo:** *Función*  
+**Parámetro:** $sCodigoDeIdioma
+**Valor:** Verdadero/Falso  
+**Explicación:** Devuelve un valor *true/false* si el idioma está o no activo, y no está dado de baja  
+**Ejemplo:**
+
+	$gemi = Yii::app()->getModule('gemi');
+	$IdiomaDisponible = $gemi->IdiomaEstaDisponible('es');
+	$IdiomaNoDisponible = $gemi->IdiomaEstaDisponible('en');
+	$IdiomaNoDisponible2 = $gemi->IdiomaEstaDisponible('es');
+
+	print_r($IdiomaDisponible);
+	$IdiomaDisponible[bool]: true
+
+	print_r($IdiomaNoDisponible);
+	$IdiomaDisponible[bool]: false
+
+	print_r($IdiomaNoDisponible2);
+	$IdiomaDisponible2[bool]: false
+
+----
+###Créditos:
+Para el desarrollo de este módulo se utilizaron los siguientes recursos:
+
+ - [LanguageSelector](http://www.yiiframework.com/wiki/293/manage-target-language-in-multilingual-applications-a-language-selector-widget-i18n)
+ - [MissingTranslation](http://www.yiiframework.com/extension/db-missing-translations)
+ - [EUpadteDialog](http://www.yiiframework.com/extension/eupdatedialog)
+