sesión 13 i18n & l10n zend_locale zend_date zend_translate zend_currency instructor: ing....
TRANSCRIPT
Sesión 13I18n & L10nZend_LocaleZend_Date
Zend_TranslateZend_Currency
Instructor: Ing. Ernesto Anaya Ruiz
Desarrollo Web Profesionalcon PHP y Zend Framework
i18n & l10n
Ejemplo
i18n
La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código
l10n
La localización es el proceso de adaptar el software para una región específica mediante la adición de componentes específicos de un locale y la traducción de los textos, por lo que también se le puede denominar regionalización
I N T E R N A T I O N A L I Z A T I O N
i 1 8 n
L O C A L I Z A T I O N
l 1 0 n
Zend_Locale
Zend_Locale
Zend_Locale es la respuesta de Zend Framework a la pregunta: ¿Cómo podría la misma aplicación ser usada en el mundo entero?No basta solo con traducir los textos, ya que en diferentes partes del mundo se usan diferentes convenciones para fechas, medidas, moneda, etc.
Creando un objeto de la clase Zend_Locale
<?php // Especificando la localidad (locale) $locale = new Zend_Locale('de_DE'); // Idioma Alemán _ Alemania ?>
<? $l = new Zend_Locale(); ?> default: <?=$l;?><br />
<? $l = new Zend_Locale(Zend_Locale::BROWSER); ?> Zend_Locale::BROWSER: <?=$l;?><br />
<? $l = new Zend_Locale(Zend_Locale::ENVIRONMENT); ?> Zend_Locale::ENVIRONMENT: <?=$l;?><br />
<? $l = new Zend_Locale(Zend_Locale::ZFDEFAULT); ?> Zend_Locale::FRAMEWORK: <?=$l;?><br />
default: en_USZend_Locale::BROWSER: en_USZend_Locale::ENVIRONMENT: es_PEZend_Locale::FRAMEWORK: en
Capturando el Locale del contexto
<? $l = new Zend_Locale('es'); // Solo idioma ?> <?=$l;?><br />
<? $l = new Zend_Locale('es_PE'); // Idioma y Región ?> <?=$l;?><br />
eses_PE
Idioma y Región
<? Zend_Locale::setDefault('es_PE'); ?> <? $l2 = new Zend_Locale(Zend_Locale::ZFDEFAULT); ?> (default cambiado) : <?=$l2;?><br /> (idioma) : <?=$l2->getLanguage();?><br /> (region) : <?=$l2->getRegion();?><br />
(default cambiado) : es_PE(idioma) : es(region) : PE
Obteniendo el Idioma y Región
<? $l3 = new Zend_Locale(Zend_Locale::getLocaleToTerritory('MX'));?> (idioma) : <?=$l3->getLanguage();?><br /> (region) : <?=$l3->getRegion();?><br />
<? $l4 = new Zend_Locale(Zend_Locale::getLocaleToTerritory('JP'));?> (idioma) : <?=$l4->getLanguage();?><br /> (region) : <?=$l4->getRegion();?><br />
(idioma) : es(region) : MX
(idioma) : ja(region) : JP
Locale de un Territorio
<?=Zend_Locale_Format::getNumber('123,789', array('locale'=>'es_ES')); ?><br />
<?=Zend_Locale_Format::getNumber('123.789', array('locale'=>'es_ES')); ?><br />
<?=Zend_Locale_Format::getNumber('123.789', array('locale'=>'es_PE')); ?><br />
<?=Zend_Locale_Format::getNumber('123,789', array('locale'=>'es_PE')); ?><br />
<?=Zend_Locale_Format::getNumber('123.789', array('locale'=>'it_IT')); ?><br />
<?=Zend_Locale_Format::getNumber('123.789', array('locale'=>'en_US')); ?><br />
<?=Zend_Locale_Format::getNumber('123,789', array('locale'=>'fr_FR')); ?><br />
<?=Zend_Locale_Format::getNumber('123.789', array('locale'=>'es_AR')); ?><br /> <?=Zend_Locale_Format::getNumber('123,789', array('locale'=>‘ja_JP')); ?><br />
123.789123789123.789123789123789123.789123.789123789123789
Ejemplo de uso:
Más ejemplos con Zend_Currency, Zend_Translate, Zend_Date, etc.
Zend_Date
Zend_Date
El componente Zend_Date ofrece una API detallada pero a la vez simple para manipular fechas y horas. Sus métodos aceptan una amplia variedad de tipos de información, incluyendo partes de fechas, en varias combinaciones.
Inicializando Zend_Date
<? $d = new Zend_Date();?> <?=$d?>
Apr 5, 2011 12:48:02 PM
Zend_Date implementa el método toString()
Getters
<?=$d?><br /> <?=$d->get()?><br /> <?=$d->get(Zend_Date::DATETIME)?><br /> <?=$d->get(Zend_Date::DATETIME_FULL)?><br />
<?=$d->get(Zend_Date::ATOM)?><br /> <?=$d->get(Zend_Date::DAY_OF_YEAR)?><br /> <?=$d->get(Zend_Date::DAY)?><br /> <?=$d->get(Zend_Date::WEEK)?><br />
Apr 5, 2011 1:09:57 PM1302026997Apr 5, 2011 1:09:57 PMTuesday, April 5, 2011 1:09:57 PM America/Lima2011-04-05T13:09:57-05:00940514
Setters
<? $d->set('16:00:00',Zend_Date::TIMES); ?> <?=$d?><br />
<? $d->set(44,Zend_Date::SECOND); ?> <?=$d?><br /> <? $d->set(1986,Zend_Date::YEAR); ?> <?=$d?><br /> <? $d->set(2,Zend_Date::MONTH); ?> <?=$d?><br /> <? $d->set(23,Zend_Date::DAY); ?> <?=$d?><br /> <?=$d->get(Zend_Date::DATETIME_FULL)?> <br />
Apr 5, 2011 4:00:00 PMApr 5, 2011 4:00:44 PMApr 5, 1986 4:00:44 PMFeb 5, 1986 4:00:44 PMFeb 23, 1986 4:00:44 PMSunday, February 23, 1986 4:00:44 PM America/Lima
Incrementado y Decrementando
<?=$d?><br />
<? $d->add('02:30:00',Zend_Date::TIMES); ?> <? $d->add(1,Zend_Date::MONTH); ?> <?=$d?><br />
<? $d->sub(3,Zend_Date::HOUR); ?> <? $d->sub(1,Zend_Date::YEAR); ?> <?=$d?><br />
Feb 23, 1986 4:00:44 PMMar 23, 1986 6:30:44 PMMar 23, 1985 2:30:44 PM
Comparación: mayor, menor o igual
<? $d = new Zend_Date();?> <?=$d?><br /><? $h = 23; ?> <? $c = $d->compare($h,Zend_Date::HOUR); ?> <?= $c==0 ? "Son las $h horas“ : ( $c==-1 ? "Aun no son las $h horas“ : "Ya son mas de las $h horas“ )?><br />
Apr 5, 2011 1:28:47 PMAun no son las 23 horas
Comparación: igualdad o desigualdad
<? $d = new Zend_Date();?> <?=$d?><br /><? $h = 23; ?>
<?= $d->equals($h,Zend_Date::HOUR) ? "Son las $h horas“ : "No son las $h horas“?><br />
Apr 5, 2011 1:28:47 PMNo son las 23 horas
Usando Zend_Locale
<? $es = new Zend_Locale('es_PE'); ?> <? $d1 = new Zend_Date('1 de abril del 2011',Zend_Date::DATE_LONG,$es);?> <?=$d1?><br />
<? $d2 = new Zend_Date('April 2, 2011');?> <?=$d2?><br />
<? $d3 = new Zend_Date(‘5 avril 2011',Zend_Date::DATE_LONG,'fr');?> <?=$d3?><br />
01/04/2011 00:00:00Apr 2, 2011 12:00:00 AM5 avr. 2011 00:00:00
Otros métodos de Zend_Date
"<?=$d1?>" <?=$d1->isEarlier($d2)?'es':'no es'?> anterior a "<?=$d2?>"<br /> "<?=$d1?>" <?=$d1->isLater($d2)?'es':'no es'?> posterior a "<?=$d2?>"<br /> "<?=$d1?>" <?=$d1->isTomorrow()?'es':'no es'?> mañana<br /> "<?=$d2?>" <?=$d2->isYesterday()?'fue':'no fue'?> ayer<br /> "<?=$d3?>" <?=$d3->isToday()?'es':'no es'?> hoy<br /> "<?=$d1?>" <?=$d1->isLeapYear()?'es':'no es'?> año bisiesto<br /> <? $d1->add(1,Zend_Date::YEAR); ?> "<?=$d1?>" <?=$d1->isLeapYear()?'es':'no es'?> año bisiesto<br />
"01/04/2011 00:00:00" es anterior a "Apr 2, 2011 12:00:00 AM""01/04/2011 00:00:00" no es posterior a "Apr 2, 2011 12:00:00 AM""01/04/2011 00:00:00" no es mañana"Apr 2, 2011 12:00:00 AM" no fue ayer"5 avr. 2011 00:00:00" es hoy"01/04/2011 00:00:00" no es año bisiesto"01/04/2012 00:00:00" es año bisiesto
Creando una fecha de un UNIX timestamp
// SELECT UNIX_TIMESTAMP(my_datetime_column) FROM my_table $unixtimestamp = 1101491890; $d = new Zend_Date($unixtimestamp, Zend_Date::TIMESTAMP); echo $d."<br />";
Nov 26, 2004 12:58:10 PM
Creando una fecha de un date (db)
// SELECT datecolumn FROM my_table $datecolumn = '1998-09-24'; $d = new Zend_Date($datecolumn, Zend_Date::ISO_8601); echo $d."<br />";
Sep 24, 1998 12:00:00 AM
Creando una fecha de un array
// Array $datearray = array('year' => 2006, 'month' => 4, 'day' => 18, 'hour' => 12, 'minute' => 3, 'second' => 10); $d = new Zend_Date($datearray); echo $d."<br />";
Apr 18, 2006 12:03:10 PM
Zend_Translate
Zend_Translate
Zend_Translate es la solución de Zend Framework para construir aplicaciones multi-idioma.
Inicializando Zend_Translate en el bootstrapprotected function _initTranslation(){// Bootstrap $regT = Zend_Registry::get('t'); $lang = isset($regT->lang)?$regT->lang:'es'; $es = array( 'message1' => 'Mensaje 1', 'message2' => 'Mensaje 2', 'message3' => 'Mensaje 3'); $en = array( 'message1' => 'Message 1', 'message2' => 'Message 2', 'message3' => 'Message 3'); $de = array( 'message1' => 'Nachricht 1', 'message2' => 'Nachricht 2', 'message3' => 'Nachricht 3'); $t = new Zend_Translate(array( 'adapter' => 'array', 'content' => $$lang, 'locale' => $lang )); $regT->t = $t; }
Uso en las vistas
<?$regT = Zend_Registry::get('t');$t = $regT->t;?>
<?=$t->_("message1")?><br /> <?=$t->_("message2")?><br /> <?=$t->_("message3")?><br />
Cambiar de Idioma:
public function changeLangAction(){ $regT = Zend_Registry::get('t'); $regT->lang = $this->_getParam('lang'); $this->_redirect($_SERVER['HTTP_REFERER']); }
Zend_Currency
Zend_Currency
Zend_Currency es parte del fuerte soporte para i18n que brinda Zend Framework. Maneja varias operaciones relacionadas con divisas, representación de monedas, formato, intercambio, etc.
Inicialización
<? $c = new Zend_Currency(); ?> <? $c->setValue(100); ?>
<?=$c?> <br />
$100.00
i18n & l10ndefault: <?=$c?> <br /> Perú: <?$c->setLocale('es_PE');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Japón: <?$c->setLocale('ja_JP');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> México: <?$c->setLocale('es_MX');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Francia: <?$c->setLocale('fr_FR');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Italia: <?$c->setLocale('it_IT');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Costa Rica: <?$c->setLocale('es_CR');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Gran Bretaña:<?$c->setLocale('en_GB');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Rusia: <?$c->setLocale('ru_RU');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> Canadá: <?$c->setLocale('en_CA');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br /> USA: <?$c->setLocale('en_US');?> <?=$c?> (<?=$c->getName()?>,<?=$c->getShortName()?>) <br />
default: $100.00 Perú: S/. 100.00 (nuevo sol peruano,PEN) Japón: ¥ 100.00 (日本円 ,JPY) México: $ 100.00 (peso mexicano,MXN) Francia: 100,00 € (euro,EUR) Italia: € 100,00 (Euro,EUR) Costa Rica: ₡ 100,00 (colón costarricense,CRC) Gran Bretaña: £100.00 (British Pound Sterling,GBP) Rusia: 100,00 руб. (Российский рубль,RUB) Canadá: $100.00 (Canadian Dollar,CAD) USA: $100.00 (US Dollar,USD)
Algunos métodos<? $c->setValue(5100); ?> <?=$c?> <br /> <? $c->add(123.456); ?> <?=$c?> <br /> <? $c->div(13); ?> <?=$c?> <br /> <?= $c->isMore(5000)?'es’:'no es‘;?> mayor que 5000
$5,100.00 $5,223.46 $401.80 no es mayor que 5000
Cambio de Divisas
class My_TasaCambio implements Zend_Currency_CurrencyInterface { public function getRate($from, $to){ if ($from !== "USD" && $from !== "PEN" ) { throw new Exception('Solo se cambia USD, PEN'); } switch ($from) { case 'USD': switch ($to) { case 'PEN': return 2.8; } case 'PEN': switch ($to) { case 'USD': return 0.3571; } } throw new Exception("No se cambia a $to"); } }
Cambio de Divisas
<? $c1 = new Zend_Currency(); ?> <? $tc = new My_TasaCambio(); ?> <? $c1->setService($tc) ?> <? $c1->setValue(1000,'PEN'); ?> <?=$c1;?> <br />
<? $c1 = new Zend_Currency('es_PE'); ?> <? $tc = new My_TasaCambio(); ?> <? $c1->setService($tc) ?> <? $c1->setValue(1000,'USD'); ?> <?=$c1;?>
$357.10S/. 2,800.00