¡La versión 2.0 de Play ya está lista! Ayúdanos a traducir la documentación de la útlima versión y sigue nuestro progreso.

Manuales, tutoriales & referencias

Consulte

Contenidos

Elija la versión

Buscar

Busque con google

Libros

Internationalización

La internacionalización (I18N) le permite adaptar su aplicación a diferentes idiomas a fin de contemplar diferencias regionales. Siga estos pasos para habilitar la internacionalización en su aplicación.

¡Utilice solamente UTF-8!

Play soporta tan sólo una codificación: UTF-8. Dado que los problemas de codificación pueden ser misteriosos y difíciles de encontrar, hemos elegido soportar sólo una codificación. UTF-8 permite mostrar todos los caracteres para todos los idiomas.

Asegúrese de ser consistente con el uso de UTF-8 en toda su aplicación:

  • Edite todos tus ficheros fuente como UTF-8
  • Defina cabeceras de codificación adecuadas en HTTP
  • Configure los meta tags de HTML a UTF-8
  • Si usa una base de datos, configúrela para que use UTF-8, y siempre conéctese a ella usando UTF-8

Nota

El problema con UTF-8 es la razón por la que la mayoría de los ficheros de configuración de Play, aunque son ficheros de propiedades Java, no se llaman *.properties. Java impone el requerimiento de que los ficheros de propiedades deban ser codificados en ISO-8859-1. Los ficheros de configuración de Play tienen que estar codificados UTF-8. ¿Hace falta decir más?

Externalice sus mensajes

Para soportar I18N tiene que externalizar todos los mensajes de su aplicación.

Cree un fichero llamado messages en el directorio conf/ de la aplicación. Este fichero no es en realidad más que un fichero de propiedades de Java.

hello=Hello!
back=Back

Luego puede definir un fichero message específico para cada idioma que se pueda usar en su aplicación. Basta añadir el código ISO del idioma como extensión.

Por ejemplo, el fichero de mensajes que contiene las traducciones al francés será conf/messages.fr:

hello=Bonjour!
back=Retour

Defina los idiomas soportados por la aplicación

Defina una lista de idiomas soportados en application.langs configuration.

Al recibir la primera solicitud de un usuario nuevo, Play intentará adivinar el lenguaje por defecto a utilizar. Lo hace parseando la cabecera HTTP Accept-language. Luego salva el idioma elegido en la cookie PLAY_LANG. Así, a la siguiente entrada, utilizará el mismo idioma.

Puede usar una pareja idioma/país si quiere distinguir entre variantes, como en_US y en_GB, o zh_CN y zh_TW. No obstante, tenga en cuenta que es probable que algunos usuarios sólo expongan el idioma y no el país en su Accept-language. Por esta razón, siempre debes incluir además el idioma “base” (p. ej. en).

Por ejemplo, si la mayoría de sus usuarios son de US pero también quiere soportar inglés británico, se recomienda usar solamente “en” para el inglés de USA y “en_GB” para el inglés británico.

Desde el código de la aplicación puede recuperar el idioma actual del usuario accediendo al objeto play.i18n.Lang:

String lang = Lang.get();

Si quiere cambiar permanentemente el idioma del usuario, use el método change():

Lang.change("ja");

El nuevo valor se salvará en la cookie de idioma del usuario.

Defina el formato de fecha de acuerdo al idioma local

Configure date.format para especificar el formato por defecto:

Recupere los mensajes localizados

Argumentos del mensaje

Desde el código de la aplicación, puede recuperar los mensajes definidos en los ficheros de mensajes. Desde Java, utilice el objeto play.i18n.Messages.

public static void hello() {
    renderText(Messages.get("hello"));
}

Soportamos el formateado de mensajes mediante la sintaxis de formateo estándar del java.util.Formatter ‘Format string syntax’. También puede definir contenido dinámico en el mensaje:

hello=Hello %s!

donde %s representa un argumento del mensaje que se devolverá como un String. Los argumentos del mensaje van como argumentos adicionales (varargs) a Messages.get:

public static void hello(String user) {
    renderText(Messages.get("hello", user));
}

Salida de Plantilla

Desde una plantilla puede usar la sintaxis especial &{…} para mostrar mensajes localizados:

<h1>&{'hello'}</h1>

o usar contenido dinámico en los argumentos de los mensajes:

<h1>&{'hello', params.user}</h1>

Argumentos Múltiples

Pueden definirse argumentos múltiples para mensajes, como este mensaje que se refiere a dos argumentos de tipo ‘decimal integer’:

guess=Por favor elige un número entre %d y %d

que puede desplegar desde una plantilla especificando los argumentos del mensaje en el orden adecuado:

<p>&{'guess', low, high}</p>

Indices de argumentos

También puede especificar el argumento del mensaje explícitamente, a fin de utilizarlos en un orden diferente. Por ejemplo, dado un mensaje en inglés que tiene dos parámetros:

guess.characteristic=Guess %s’s %s.

con una salida de mensaje como esta:

<p>&{'guess.characteristic', person.name, 'age'}</p>

La traducción francesa tiene los dos mensajes en el orden inverso, así que en la traducción francesa especificamos los índices de los argumentos:

guess.characteristic=Devinez %2$s de %1$s.

donde %2$s muestra el segundo argumento como una cadena de texto.

Finalmente, queremos localizar el nombre característico ‘age’ también, así que cambiamos la salida para mostrar la clave de mensaje person.age y cambiamos la definición del mensaje así:

guess.characteristic=Guess %s’s &{%s}.
person.age = age

y

guess.characteristic=Devinez &{%2$s} de %1$s.
person.age = l’age

donde &{%s} es una búsqueda en el propio mensaje, con el valor del argumento como índice.

Próximos pasos

Lo siguiente: Cache.