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 appl...
Caso i18n de nvivo.es
•   Nginx, PHP4 + Smarty, MySQL 5, JQuery
    Plataforma completa en ISO-8859-1
•   Despliegue de nv...
Pasos realizados
•   Paso de todos los archivos de iso-8859-1 a
    UTF-8. iconv —from-code=ISO-8859-1 —to-code=UTF-8 $fil...
Pasos realizados II
•   Creación de estructuras de catálogos de idioma:
    archivos .PO, .MO

•   Uso de gettext en PHP, ...
UTF-8
•   ¿qué es UTF-8? Es una norma de transmisión de longitud
    variable para caracteres codificados utilizando Unicod...
A tener en cuenta: Backend
              locale -a //vemos todos los locales


•
              /etc/locale.gen //Añadimos ...
A tener en cuenta: PHP

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

•   utf8_encode, ...
A tener en cuenta: Frontend
• XHTML
  <meta http-equiv=quot;Content-Typequot; content=quot;text/html; charset=utf-8quot; /...
gettext
•   Flexible: Fácil de actualizar nuevas frases

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

•   ¿por qu...
¡A programar!
Host - 217.113.247.140 / phpbarcelona.phpbcn.org
User - phpworkshop
Passwd - phpworkshop
URL - http://phpbar...
Upcoming SlideShare
Loading in...5
×

i18n en PHP

3,422

Published on

Notes for the workshop titled '18n in PHP' for the 1st. Barcelona php workshop

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,422
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
50
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

i18n en PHP

  1. 1. i18n en PHP Carlos Sánchez - carlos@nvivo.es David Gaya - david.gaya@assertio.es
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×