Louder Developer Zone
Articles, Tutorials and Tips from the community and Louder developers

Introducción al componente Linguistics

Publish at Wednesday, March 10, 2010
By Core Developers - Louder

Kumbia Enterprise (KEF) ofrece un completo conjunto de componentes que facilitan el proceso de localización tanto idiomático como regional. Localizar las aplicaciones ayuda a generar mejores productos que estén adaptados a un mundo lleno de oportunidades.

Un breve resúmen de los componentes de localización de KEF que ofrece actualmente:

  • Locale: Que permite permite obtener y establecer información de localización en aplicaciones sobre datos especificos geográficos, políticos, culturales ó regionales.
  • Translate: Que permite la creación de aplicaciones multi-idioma usando diferentes adaptadores para obtener las listas de traducción.
  • Date: Permite obtener propiedades del tiempo teniendo en cuenta la configuración de formatos de acuerdo a la localización.
  • Currency: Proporciona facilidades para trabajar con cantidades numéricas relacionadas con dinero y monedas teniendo en cuenta la localización.

En esta ocasión presentaremos un nuevo componente de la familia de "localización". Su nombre es "Linguistics" y su objetivo es facilitar al desarrollador la tarea de generar mensajes contextuales que sean más amigables para los usuarios de las aplicaciones. Estos mensajes tienen en cuentas las reglas idiomáticas de la localización que esté activa.

Uso de Linguistics

A continuación vamos a ver algunos ejemplos ilustrativos del uso de Linguistics. El componente soporta varios idiomas, en este caso mostraremos solo sus capacidades con el español.

Creando un objeto Linguistics

Se crea un objeto de esta clase. El constructor recibe un string de localización opcional. En caso de no indicarse este parámetro se tomará el que tenga la aplicación por defecto en config.ini.


//Usar español de Perú
$linguistic = new Linguistics("es_PE");

//usar localización de la aplicación
$linguistic = new Linguistics();

Pluralización

El método pluralize permite pluralizar palabras en singular basado en reglas idiomáticas. Los acentos (tildes) se mantienen cuando es necesario, como en el caso de "tabú" y "papá" pero se eliminan en el caso de "canción". Las palabras que ya están en plural se mantienen igual.


$linguistic->pluralize("exámen"); # => examenes
$linguistic->pluralize("tabú"); # => tabúes
$linguistic->pluralize("papá"); # => papás
$linguistic->pluralize("vez"); # => veces
$linguistic->pluralize("zigzag"); # => zigzagues
$linguistic->pluralize("currículos"); # => currículos
$linguistic->pluralize("código"); # => códigos
$linguistic->pluralize("frac"); # => fraques
$linguistic->pluralize("canción"); # => canciones

Artículos determinados e indeterminados

Los métodos "a" y "the" adicionan los artículos determinados (el, la, los, las) e indeterminados (un, una, unos, unas) a una palabra singular de acuerdo al genero (masculino, femenino) de la palabra que se pase como argumento. Cuando se pasan palabras plurales se debe pasar el segundo parámetro como "true":


$linguistic->a("televisor"); # => un televisor
$linguistic->the("televisor"); # => el televisor

$linguistic->a("legumbre"); # => una legumbre
$linguistic->the("legumbre"); # => la legumbre

$linguistic->a("salud"); # => una salud
$linguistic->the("salud"); # => la salud

$linguistic->a("componentes", true); # => unos componentes
$linguistic->the("componentes", true); # => los componentes

Cambiar genero a las palabras

Algunas palabras tienen un genero fijo masculino ó femenino, sin embargo otras como las profesiones y nacionalidades varian de acuerdo al genero al que se refeieren. Linguistics ofrece los métodos "toFemale" y "toMale" para intentar cambiar el genero a una palabra cuando esto aplique. Estos métodos solo reciben palabras en singular.


$linguistic->toMale("pintora"); # => pintor;
$linguistic->toMale("ingeniera en informática"); # => ingeniero en informática
$linguistic->toMale("escultora"); # => escultor
$linguistic->toMale("bailarina"); # => bailarin
$linguistic->toMale("profesora"); # => profesor
$linguistic->toMale("estudiante"); # => estudiante
$linguistic->toMale("ama de casa"); # => amo de casa

$linguistic->toFemale("profesor de la escuela"); # => profesora de la escuela
$linguistic->toFemale("estudiante"); # => estudiante
$linguistic->toFemale("alumno"); # => alumna
$linguistic->toFemale("cinematógrafo"); # => cinematógrafa
$linguistic->toFemale("detective"); # => detective

$linguistic->toFemale("peruano"); # => peruana
$linguistic->toFemale("mexicano"); # => mexicana
$linguistic->toFemale("francés"); # => francesa
$linguistic->toFemale("brasilero"); # => brasilera

Conjunciones

Las conjunciones sirven permiten generar frases de unión de términos de acuerdo a la localización definida. El método Locale::getConjunction ofrece conjunciones para un grupo de valores de forma básica:

$locale->conjunction(array("león", "avestruz", "elefante")); # => león, avestruz y elefante

El componente Linguistics también ofrece este método pero analiza cada argumento para producir un resultado más natural:

$linguistic->conjunction(array("león", "avestruz", "elefante")); # => el león, la avestruz y el elefante

Por defecto la conjunción se genera adicionando los artículos determinados (el, la, los, las). Si se pasa true como segundo parámetro utilizará indeterminados (un, una, unos, unas):

$linguistic->conjunction(array("león", "avestruz", "elefante"), true); # => un león, una avestruz y un elefante

Cuando un valor está repetido en el argumento de conjunction también se trata de producir un resultado más natural:

$linguistic->conjunction(array("león", "avestruz", "elefante", "avestruz"), true); # => un león, dos avestruces y un elefante

También es posible pasar el conjunto de valores como un string separado por espacios:

$linguistic->conjunction("lunes martes miércoles")); # => el lunes, el martes y el miércoles

Cuantificación

En el pasado vimos como el componente Currency ofrecia la posibilidad de obtener un número en sus palabras exactas de acuerdo a una localización.

Currency::moneyToNumbers(1021); # => mil ventiuno

La cuantificación en Linguistics en cambio trata de describir cuantitativamente un substantivo con respecto a una cantidad sin que se busque un resultado exacto. Se trata solo de ofrecer una idea de cuanto se está hablando:


$linguistic->getQuantification(0, "vaca"); # => ninguna vaca
$linguistic->getQuantification(5, "vaca"); # => muchas vacas
$linguistic->getQuantification(25, "vaca"); # => decenas de vacas
$linguistic->getQuantification(200, "vaca"); # => centenares de vacas
$linguistic->getQuantification(5000, "vaca");  # => miles de vacas
$linguistic->getQuantification(2000000, "vaca"); # => millones de vacas
$linguistic->getQuantification(-1, "vaca"); # => menos una vaca

$linguistic->getQuantification(0, "puercoespín"); # => ningún puercoespín
$linguistic->getQuantification(1, "puercoespín"); # => un puercoespín
$linguistic->getQuantification(5, "puercoespín"); # => cinco puercoespines
$linguistic->getQuantification(105, "puercoespín"); # => decenas de puercoespines

Casos Prácticos

El componente Linguistics se puede aprovechar de muchas formas en una aplicación:


$lg = new Linguistics();

//Mensajes de confirmación
echo "Se creó ".$lg->a("cliente"); # => Se creó un cliente

//Cantidades de algo
$numero = 2514;
echo "Hay ".$lg->getQuantification($numero, "mensaje"); # => Hay miles de mensajes

//Mensajes de error de ActiveRecord
if($producto->save()){
	$campos = array();
	foreach($producto->getMessages() as $message){
		$campos[] = $message->getField();
	}
	echo "Los siguientes campos presentan error: ".$lg->conjunction($campos);
}

Conclusiones

El nuevo componente Linguistics hace más fácil la tarea de generar mensajes contextuales a aplicaciones localizadas sin generar un impacto en el desarrollador ni aumentar la complejidad del código de las aplicaciones.

Linguistics es parte de Kumbia Enterprise Framework v1.7.1 que tiene la licencia abierta New BSD.

Tell friends about this article on social networks:



blog comments powered by Disqus

Previous: Envio de correos en Kumbia Enterprise con Gmail Next: Usando MongoDB en KEF

Colaborate

Colaborate

We invite you to submit articles and tutorials to the Developer Zone.

Archive

  • Mayo 2009

Maybe you are interested

Added value to your Business.

Become a Solution Partner Louder Now.

Bring to the Open-Source retroactively..

Learn more about Shared Louder Labs