¿Cómo internacionalizar una aplicación web Java?

Aprendí de Google que la internacionalización es el proceso mediante el cual puedo hacer que mi aplicación web use todos los idiomas. Quiero entender Unicode para el proceso de internacionalización, así que aprendí sobre Unicode de aquí y allá .

Puedo entender sobre Unicode que cómo un conjunto de caracteres codificado en bytes y de nuevo decodificados en charset. Pero no sé cómo avanzar más. Quiero aprender cómo comparar cadenas y necesito saber cómo implementar la internacionalización en mi aplicación web. Alguna sugerencia por favor? Por favor guíame.

Mi objective:

Mi objective principal es desarrollar una aplicación web para traducción (inglés a árabe y viceversa). Quiero seguir Internacionalización. Deseo ejecutar mi aplicación web para traducción en los tres navegadores, a saber, FF, Chrome, IE. ¿Cómo logro esto?

En el caso de una aplicación de JSP / Servlet básica, el enfoque básico sería usar JSTL fmt taglib en combinación con paquetes de recursos . Los paquetes de recursos contienen pares clave-valor donde la clave es una constante que es igual para todos los idiomas y el valor difiere por idioma. Los paquetes de recursos generalmente son archivos de propiedades que son cargados por ResourceBundle API. Sin embargo, esto puede personalizarse para que pueda cargar los pares clave-valor de, por ejemplo, una base de datos.

Aquí hay un ejemplo de cómo internacionalizar el formulario de inicio de sesión de su aplicación web con paquetes de recursos basados ​​en archivos de propiedades.


  1. Cree los siguientes archivos y colóquelos en algún paquete, por ejemplo, com.example.i18n (en el caso de Maven, colóquelos en la estructura del paquete dentro de src/main/resources ).

    text.properties (contiene pares clave-valor en el idioma predeterminado, por lo general en inglés)

     login.label.username = Nombre de usuario
     login.label.password = Contraseña
     login.button.submit = Iniciar sesión
    

    text_nl.properties (contiene pares clave-valor en holandés ( nl ))

     login.label.username = Gebruikersnaam
     login.label.password = Wachtwoord
     login.button.submit = Inloggen
    

    text_es.properties (contiene pares de clave-valor de español ( es ))

     login.label.username = Nombre de usuario
     login.label.password = Contraseña
     login.button.submit = Acceder
    

    El nombre de archivo del paquete de recursos debe adherirse al siguiente patrón name_ll_CC.properties . La parte _ll debe ser el código de idioma ISO 693-1 en minúscula. Es opcional y solo se requiere siempre que la parte _CC esté presente. La parte _CC debe ser el código de país mayúsculo ISO 3166-1 Alpha-2 . Es opcional y, a menudo, solo se usa para distinguir entre dialectos de idiomas específicos de un país, como el inglés americano ( _en_US ) y el inglés británico ( _en_GB ).


  2. Si aún no lo hiciste, instala JSTL. Si está ejecutando en un contenedor Servlet 2.5 o posterior (Tomcat 6.0 y así sucesivamente) y su web.xml se declara conforme a la especificación Servlet 2.5, simplemente coloque jstl-1.2.jar en la carpeta /WEB-INF/lib webapp.


  3. Cree el siguiente archivo JSP de ejemplo y colóquelo en la carpeta de contenido web.

    login.jsp

     < %@ page pageEncoding="UTF-8" %> < %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> < %@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>    < !DOCTYPE html>   JSP/JSTL i18n demo   


    El maneja el idioma actual. Si el idioma fue proporcionado como parámetro de solicitud (por menú desplegable de idioma), entonces se establecerá. De lo contrario, si el idioma ya estaba configurado previamente en la sesión, apéguese a él en su lugar. De lo contrario, use la configuración regional proporcionada por el usuario en el encabezado de la solicitud.

    El establece la configuración regional para el paquete de recursos. Es importante que esta línea esté antes de .

    inicializa el paquete de recursos por su nombre base (es decir, el nombre completo del paquete calificado hasta con el nombre único sin el especificador _ll_CC ).

    El recupera el valor del mensaje mediante la clave de paquete especificada.

    El informa a los buscadores en qué idioma está la página para que no se marque como contenido duplicado (por lo tanto, es bueno para SEO).

    El menú desplegable de idioma se enviará inmediatamente por JavaScript cuando se elija otro idioma y la página se actualizará con el idioma elegido.


Sin embargo, debe tener en cuenta que los archivos de propiedades se leen por defecto utilizando la encoding de caracteres ISO-8859-1. Tendría que escapar de ellos mediante escapes Unicode. Esto se puede hacer usando la herramienta native2ascii.exe proporcionada por native2ascii.exe . Consulte también esta sección del artículo para obtener más detalles.

Una alternativa teórica sería proporcionar un paquete con un Control personalizado para cargar esos archivos como UTF-8, pero desafortunadamente no es compatible con el JSTL fmt taglib básico. Debería gestionarlo usted mismo con la ayuda de un Filter . Hay marcos (MVC) que pueden manejar esto de una manera más transparente, como JSF, ver también este artículo .

Además de lo que dijo BalusC, debes preocuparte por la direccionalidad (ya que el inglés está escrito de izquierda a derecha y el árabe al revés). La forma más fácil sería agregar el atributo dir al elemento html de su página web JSP y externalizarlo, por lo que el valor proviene del archivo de propiedades (al igual que con otros elementos o atributos):

  ...  

Además, existen pocos problemas con el diseño de dicha aplicación; por lo menos debe evitar el posicionamiento absoluto. Si no puede evitar eso por alguna razón, puede usar diferentes hojas de estilo por cada idioma o hacer algo que esté prohibido , es decir, usar tablas para administrar el diseño. Si desea utilizar elementos div, le sugiero que utilice el posicionamiento relativo con atributos de estilo “simétricos” de izquierda y derecha (ambos tienen el mismo valor), ya que esto es lo que hace que la direccionalidad de conmutación funcione.

Puede encontrar más acerca de los sitios web bidireccionales aquí .

basado en este tutorial , estoy usando lo siguiente en GAE – App Engine de Google:

Un archivo jsp de la siguiente manera:

 < %@ page import="java.io.* %> < % String lang = "fr"; //Assign the correct language either by page or user-selected or browser language etc. ResourceBundle RB = ResourceBundle.getBundle("app", new Locale(lang)); %> < !DOCTYPE html> < %@ page contentType="text/html;charset=UTF-8" language="java"%>    

< %= RB.getString("greeting") %>

Y agregando los archivos llamados: app.properties (predeterminado) y app_fr.properties (y así sucesivamente para cada idioma). Cada uno de estos archivos debe contener las cadenas que necesita de la siguiente manera: key: value_in_language, por ejemplo, app_fr.properties contiene:

 greeting=Bonjour! 

app.properties contiene:

 greeting=Hello! 

Eso es todo