Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing....

Preview:

Citation preview

Sesión 13I18n & L10nZend_LocaleZend_Date

Zend_TranslateZend_Currency

Instructor: Ing. Ernesto Anaya Ruiz

Desarrollo Web Profesionalcon PHP y Zend Framework

ernestex@gmail.com

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

Recommended