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

39
Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend Framework [email protected]

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

Page 1: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Sesión 13I18n & L10nZend_LocaleZend_Date

Zend_TranslateZend_Currency

Instructor: Ing. Ernesto Anaya Ruiz

Desarrollo Web Profesionalcon PHP y Zend Framework

[email protected]

Page 2: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

i18n & l10n

Page 3: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Ejemplo

Page 4: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 5: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 6: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 7: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Zend_Locale

Page 8: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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.

Page 9: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Creando un objeto de la clase Zend_Locale

<?php     // Especificando la localidad (locale)     $locale = new Zend_Locale('de_DE'); // Idioma Alemán _ Alemania ?>

Page 10: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

<? $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

Page 11: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

<? $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

Page 12: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

<? 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

Page 13: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

<? $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

Page 14: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

<?=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.

Page 15: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Zend_Date

Page 16: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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.

Page 17: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Inicializando Zend_Date

<? $d = new Zend_Date();?> <?=$d?>

Apr 5, 2011 12:48:02 PM

Zend_Date implementa el método toString()

Page 18: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 19: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 20: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 21: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 22: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 23: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 24: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 25: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 26: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 27: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 28: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Zend_Translate

Page 29: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Zend_Translate

Zend_Translate es la solución de Zend Framework para construir aplicaciones multi-idioma.

Page 30: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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; }

Page 31: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Uso en las vistas

<?$regT = Zend_Registry::get('t');$t = $regT->t;?>

<?=$t->_("message1")?><br /> <?=$t->_("message2")?><br /> <?=$t->_("message3")?><br />

Page 32: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Cambiar de Idioma:

public function changeLangAction(){     $regT = Zend_Registry::get('t');     $regT->lang = $this->_getParam('lang');     $this->_redirect($_SERVER['HTTP_REFERER']); }

Page 33: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Zend_Currency

Page 34: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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.

Page 35: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

Inicialización

<? $c = new Zend_Currency(); ?> <? $c->setValue(100); ?>

 <?=$c?> <br />

$100.00

Page 36: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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)

Page 37: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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

Page 38: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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");     } }

Page 39: Sesión 13 I18n & L10n Zend_Locale Zend_Date Zend_Translate Zend_Currency Instructor: Ing. Ernesto Anaya Ruiz Desarrollo Web Profesional con PHP y Zend.

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