SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
i18n en PHP

Carlos Sánchez - carlos@nvivo.es
David Gaya - david.gaya@assertio.es
Introducción
•   i18n NO ES sólo presentar una web en varios idiomas

•   i18n is the process of designing a software application
    so that it can be adapted to various languages and
    regions without engineering changes (Wikipedia)

•   L10n - Enfoca aspectos culturales (Fechas, monedas,
    medidas...)

•   L10n is the process of adapting software for a specific
    region or language by adding locale-specific components
    and translating text. (Wikipedia)
Caso i18n de nvivo.es
•   Nginx, PHP4 + Smarty, MySQL 5, JQuery
    Plataforma completa en ISO-8859-1
•   Despliegue de nvivo.es en más países.
    Comenzando con UK y DE

•   Información Local

•   Localización geográfica: Webservice de
    Geonames. Múltiples dominios, TLDs diferentes
    por cada país, URLs diferentes en cada idioma:
    http://www.5gig.co.uk
    http://www.5gig.de
Pasos realizados
•   Paso de todos los archivos de iso-8859-1 a
    UTF-8. iconv —from-code=ISO-8859-1 —to-code=UTF-8 $file   > $nfile



•   Configuración de Nginx, php.ini, MySQL.

•   Solución de problemas UTF-8 de PHP: Funciones
    mb_string

•   Fechas, moneda, unidades, soporte de localidades
    internacional: Geonames, strftime

•   Instalación de locales en el sistema, gettext,
    utilidades gettext.
Pasos realizados II
•   Creación de estructuras de catálogos de idioma:
    archivos .PO, .MO

•   Uso de gettext en PHP, uso de gettext en Smarty.

•   Traducción de los catálogos.

•   Traducción de las URLs y gestión con
    múltiples .htaccess (rewrite de nginx).
UTF-8
•   ¿qué es UTF-8? Es una norma de transmisión de longitud
    variable para caracteres codificados utilizando Unicode

•   Unicode es un estándar industrial cuyo objetivo es que
    cualquier texto en cualquier forma e idioma pueda ser
    codificado para el uso informático

•   Norma nº 1 - TODO EN UTF-8: Editor, archivos,
    BD, tablas, campos...

•   Soluciona el 90% de tus problemas de i18n

•   ISO-8859-1
A tener en cuenta: Backend
              locale -a //vemos todos los locales


•
              /etc/locale.gen //Añadimos el locale que queremos instalar
    locale    locale-gen //genera los locales que encuentra en /etc/locale.gen



•
              gettext(“Hello World”);
    gettext   sprintf(gettext(“Hello %s”),$var1);
              _(“This way better”);


•   MySQL     ALTER DATABASE Journal SET CHARACTER SET utf8;
              ALTER TABLE Journal.Posts DEFAULT CHARSET SET utf8;
              ALTER TABLE MODIFY body body TEXT CHARACTER SET utf8;
              CHARACTER SET utf8 COLLATE utf8_general_ci;

              SET NAMES 'utf8';


•   Apache    .htaccess AddDefaultCharset UTF-8
A tener en cuenta: PHP

•   PHP4, PHP5 y el UTF-8 no son muy amigos
    ¡funciones mb_string! ¿ PHP 6 ?

•   utf8_encode, utf8_decode
    No es necesario si se usa UTF-8, excepto con
    strftime :(
•   http://www.phpwact.org/php/i18n/utf-8
A tener en cuenta: Frontend
• XHTML
  <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=utf-8quot; />


• Smarty Gettext
  <p>{t}Hello World{/t}</p>
  <p>{t 1=$var1 escape=”no”}Hello <strong>%1!</strong>{/t}</p>




• Javascript
  Jquery gettext ¿? - Problemas de rendimiento (AJAX, JSON)
  Nosotros preferimos Smarty
  Ojo con las expresiones regulares y el paso a UTF-8 de ficheros .js
gettext
•   Flexible: Fácil de actualizar nuevas frases

•   GPL, Estándar de facto, herramientas, utilidades

•   ¿por qué reinventar la rueda?
    xgettext, msgfmt, msgmerge....

•   La opción menos mala
    xgettext -c archivo.php
    msgfmt messages.po
    msgmerge old.po messages.po -o new.po


•   POEdit y KBabel
¡A programar!
Host - 217.113.247.140 / phpbarcelona.phpbcn.org
User - phpworkshop
Passwd - phpworkshop
URL - http://phpbarcelona.phpbcn.org/i18n_workshop/user#/

PDF - http://phpbarcelona.phpbcn.org/i18n_workshop/bcnworkshop.pdf

Más contenido relacionado

Similar a i18n en PHP

Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLJoaquín Salvachúa
 
Webinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPWebinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPArsys
 
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Daniel González Cerviño
 
WordPress Multilingue
WordPress MultilingueWordPress Multilingue
WordPress MultilingueAmit Kvint
 
M1 introduccion a php
M1   introduccion a phpM1   introduccion a php
M1 introduccion a phpEDUARDLARA1
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0Luis Ruiz Pavón
 
Redmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosRedmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosEQ SOFT EIRL
 
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...Domatix
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVIrontec
 
introduccionallaprogramacionweb-230123213144-47a8fc90.ppt
introduccionallaprogramacionweb-230123213144-47a8fc90.pptintroduccionallaprogramacionweb-230123213144-47a8fc90.ppt
introduccionallaprogramacionweb-230123213144-47a8fc90.pptssuser948499
 
INTRODUCCION AL LA PROGRAMACION WEB.ppt
INTRODUCCION AL LA PROGRAMACION WEB.pptINTRODUCCION AL LA PROGRAMACION WEB.ppt
INTRODUCCION AL LA PROGRAMACION WEB.pptTIRZOANTONIOMEDINACA
 
Mi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeMi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeCarlos Longarela
 

Similar a i18n en PHP (20)

Conociendo PHP
Conociendo PHPConociendo PHP
Conociendo PHP
 
Introdución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTMLIntrodución a la web: HTTP, URL y HTML
Introdución a la web: HTTP, URL y HTML
 
Webinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPWebinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHP
 
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++
 
WordPress Multilingue
WordPress MultilingueWordPress Multilingue
WordPress Multilingue
 
PHP IUTE
PHP IUTEPHP IUTE
PHP IUTE
 
M1 introduccion a php
M1   introduccion a phpM1   introduccion a php
M1 introduccion a php
 
.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0.NET Core 1.0 y ASP.NET Core 1.0
.NET Core 1.0 y ASP.NET Core 1.0
 
Que es php
Que es phpQue es php
Que es php
 
Que es php
Que es phpQue es php
Que es php
 
Que es php
Que es phpQue es php
Que es php
 
Redmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de ProyectosRedmine - Gestión de Portafolio de Proyectos
Redmine - Gestión de Portafolio de Proyectos
 
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...
Estado actual de la localización española. Versión 6.1 y 7.0. Comunidad vs. O...
 
Php basico
Php basicoPhp basico
Php basico
 
Curso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPVCurso Avanzado PHP para EHU/UPV
Curso Avanzado PHP para EHU/UPV
 
introduccionallaprogramacionweb-230123213144-47a8fc90.ppt
introduccionallaprogramacionweb-230123213144-47a8fc90.pptintroduccionallaprogramacionweb-230123213144-47a8fc90.ppt
introduccionallaprogramacionweb-230123213144-47a8fc90.ppt
 
INTRODUCCION AL LA PROGRAMACION WEB.ppt
INTRODUCCION AL LA PROGRAMACION WEB.pptINTRODUCCION AL LA PROGRAMACION WEB.ppt
INTRODUCCION AL LA PROGRAMACION WEB.ppt
 
Manual de php
Manual de phpManual de php
Manual de php
 
Manual de php
Manual de phpManual de php
Manual de php
 
Mi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nubeMi timeline programando desde el notepad a la nube
Mi timeline programando desde el notepad a la nube
 

Último

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 

Último (11)

investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 

i18n en PHP

  • 1. i18n en PHP Carlos Sánchez - carlos@nvivo.es David Gaya - david.gaya@assertio.es
  • 2. Introducción • i18n NO ES sólo presentar una web en varios idiomas • i18n is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes (Wikipedia) • L10n - Enfoca aspectos culturales (Fechas, monedas, medidas...) • L10n is the process of adapting software for a specific region or language by adding locale-specific components and translating text. (Wikipedia)
  • 3. Caso i18n de nvivo.es • Nginx, PHP4 + Smarty, MySQL 5, JQuery Plataforma completa en ISO-8859-1 • Despliegue de nvivo.es en más países. Comenzando con UK y DE • Información Local • Localización geográfica: Webservice de Geonames. Múltiples dominios, TLDs diferentes por cada país, URLs diferentes en cada idioma: http://www.5gig.co.uk http://www.5gig.de
  • 4. Pasos realizados • Paso de todos los archivos de iso-8859-1 a UTF-8. iconv —from-code=ISO-8859-1 —to-code=UTF-8 $file > $nfile • Configuración de Nginx, php.ini, MySQL. • Solución de problemas UTF-8 de PHP: Funciones mb_string • Fechas, moneda, unidades, soporte de localidades internacional: Geonames, strftime • Instalación de locales en el sistema, gettext, utilidades gettext.
  • 5. Pasos realizados II • Creación de estructuras de catálogos de idioma: archivos .PO, .MO • Uso de gettext en PHP, uso de gettext en Smarty. • Traducción de los catálogos. • Traducción de las URLs y gestión con múltiples .htaccess (rewrite de nginx).
  • 6. UTF-8 • ¿qué es UTF-8? Es una norma de transmisión de longitud variable para caracteres codificados utilizando Unicode • Unicode es un estándar industrial cuyo objetivo es que cualquier texto en cualquier forma e idioma pueda ser codificado para el uso informático • Norma nº 1 - TODO EN UTF-8: Editor, archivos, BD, tablas, campos... • Soluciona el 90% de tus problemas de i18n • ISO-8859-1
  • 7. A tener en cuenta: Backend locale -a //vemos todos los locales • /etc/locale.gen //Añadimos el locale que queremos instalar locale locale-gen //genera los locales que encuentra en /etc/locale.gen • gettext(“Hello World”); gettext sprintf(gettext(“Hello %s”),$var1); _(“This way better”); • MySQL ALTER DATABASE Journal SET CHARACTER SET utf8; ALTER TABLE Journal.Posts DEFAULT CHARSET SET utf8; ALTER TABLE MODIFY body body TEXT CHARACTER SET utf8; CHARACTER SET utf8 COLLATE utf8_general_ci; SET NAMES 'utf8'; • Apache .htaccess AddDefaultCharset UTF-8
  • 8. A tener en cuenta: PHP • PHP4, PHP5 y el UTF-8 no son muy amigos ¡funciones mb_string! ¿ PHP 6 ? • utf8_encode, utf8_decode No es necesario si se usa UTF-8, excepto con strftime :( • http://www.phpwact.org/php/i18n/utf-8
  • 9. A tener en cuenta: Frontend • XHTML <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=utf-8quot; /> • Smarty Gettext <p>{t}Hello World{/t}</p> <p>{t 1=$var1 escape=”no”}Hello <strong>%1!</strong>{/t}</p> • Javascript Jquery gettext ¿? - Problemas de rendimiento (AJAX, JSON) Nosotros preferimos Smarty Ojo con las expresiones regulares y el paso a UTF-8 de ficheros .js
  • 10. gettext • Flexible: Fácil de actualizar nuevas frases • GPL, Estándar de facto, herramientas, utilidades • ¿por qué reinventar la rueda? xgettext, msgfmt, msgmerge.... • La opción menos mala xgettext -c archivo.php msgfmt messages.po msgmerge old.po messages.po -o new.po • POEdit y KBabel
  • 11. ¡A programar! Host - 217.113.247.140 / phpbarcelona.phpbcn.org User - phpworkshop Passwd - phpworkshop URL - http://phpbarcelona.phpbcn.org/i18n_workshop/user#/ PDF - http://phpbarcelona.phpbcn.org/i18n_workshop/bcnworkshop.pdf