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.
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: