Outils pour utilisateurs

Outils du site


lang:java:i18n

Eclipse

Voir la page d'Eclipse pour configurer Tomcat en fonction de la locale.

Documents de base

Il est possible de travailler avec des fichiers de traduction (extension .properties) ou des classes .java.

Internationalizing the Sample Program Archive du 2011 le 26/04/2020

Les fichiers de traduction sont placés dans le dossier src/bundles/ avec l'extension .properties.

messages_en_US.properties
bonjour:Hello you.
messages_fr_FR.properties
bonjour:Soyez le bienvenu.

Les traductions sont constituées de pairs. La clé est une chaîne de caractères (afin de s'assurer d'une parfaite compatibilité, lui donner un nom compatible avec les noms de variable Java) avec comme correspondance sa traduction.

Text_en_US.java
package com.llgc.po;
 
import java.util.ListResourceBundle;
 
public class Text_en_US extends ListResourceBundle
{
 
  @Override
  protected Object[][] getContents ()
  {
    return new Object[][] { { "bonjour", "Hello you." } };
  }
 
}
Text_fr_FR.java
package com.llgc.po;
 
import java.util.ListResourceBundle;
 
public class Text_fr_FR extends ListResourceBundle
{
 
  @Override
  protected Object[][] getContents ()
  {
    return new Object[][] { { "bonjour", "Soyez le bienvenu." } };
  }
 
}

Servlet

Servlet8_1.java
package com.llgc;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.ResourceBundle;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * Servlet implementation class Servlet6
 */
@WebServlet ("/Servlet8_1")
public class Servlet8_1 extends HttpServlet
{
  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setCharacterEncoding ("UTF-8");
    PrintWriter out = response.getWriter ();
    response.setContentType ("text/html");
 
    out.println ("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
    out.println ("<html>");
    out.println ("<head>");
    out.println ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">");
    out.println ("<title>Insert title here</title>");
    out.println ("</head>");
    out.println ("<body>");
    Locale locale = new Locale ("fr", "FR");
    // Traduction dans des fichiers
    ResourceBundle messages = ResourceBundle.getBundle ("bundles.messages", locale);
    out.println (messages.getString ("bonjour"));
    out.println ("  <br />");
    locale = new Locale ("en", "US");
    // Traduction dans des classes
    messages = ResourceBundle.getBundle ("com.llgc.po.Text", locale);
    out.println (messages.getString ("bonjour"));
    out.println ("</body>");
    out.println ("</html>");
  }
 
  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
  {
    doGet (request, response);
  }
}

Rendu :

Soyez le bienvenu. 
Hello you.

JSP

indexjsp8.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"
  import="java.util.Locale, java.util.ResourceBundle"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <%
    // Traduction dans des fichiers
    Locale locale = new Locale ("fr", "FR");
    ResourceBundle messages = ResourceBundle.getBundle ("bundles.messages", locale);
    out.println (messages.getString ("bonjour"));
  %>
  <br />
  <%
    // Traduction dans des classes
    locale = new Locale ("en", "US");
    messages = ResourceBundle.getBundle ("com.llgc.po.Text", locale);
    out.println (messages.getString ("bonjour"));
  %>
</body>
</html>

Rendu :

Soyez le bienvenu. 
Hello you.

JSP+JSTL

indexjsp-jstl8.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
  <fmt:setLocale value="fr_FR" />
  <!-- Traduction dans des fichiers -->
  <fmt:bundle basename="bundles.messages">
    <fmt:message key="bonjour" />
  </fmt:bundle>
  <br />
  <fmt:setLocale value="en_US" />
  <!-- Traduction dans des classes -->
  <fmt:bundle basename="com.llgc.po.Text">
    <fmt:message key="bonjour" />
  </fmt:bundle>
  <br />
</body>
</html>

JSF

Exemple 1

Définition des locales connues et de celle par défaut :

faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
  version="2.2">
  <application>
    <locale-config>
      <default-locale>en_US</default-locale>
      <supported-locale>fr_FR</supported-locale>
    </locale-config>
  </application>
</faces-config>
index7.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view>
  <f:loadBundle var="Text" basename="com.llgc.po.Text" />
  <h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Insert title here</title>
  </h:head>
  <h:body>
    <p>
      <h:outputLabel value="#{Text.bonjour}" />
    </p>
  </h:body>
</f:view>
</html>

Dans le basename, il s'agit bien du nom de la classe sans la référence locale (fr_FR, en_US, …).

Exemple 2

faces-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
  version="2.2">
  <application>
    <locale-config>
      <default-locale>en_US</default-locale>
      <supported-locale>fr_FR</supported-locale>
    </locale-config>
    <resource-bundle>
      <base-name>bundles.messages</base-name>
      <var>ficMess</var>
    </resource-bundle>
  </application>
</faces-config>
ChangeLang.java
package com.llgc.po;
 
import java.util.Locale;
 
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
 
@ManagedBean (name = "beanInter")
public class ChangeLang
{
  private Locale locale;
 
  @PostConstruct
  public void init ()
  {
    locale = FacesContext.getCurrentInstance ().getExternalContext ().getRequestLocale ();
  }
 
  public Locale getLocale ()
  {
    return locale;
  }
 
  public void setLocale (Locale locale)
  {
    this.locale = locale;
  }
 
  public void ChoixDeLaLangue (ActionEvent actionEvent)
  {
    String idComposant = actionEvent.getComponent ().getId ();
    int index = idComposant.indexOf ("_");
    if (index > 0)
    {
      String langue = idComposant.substring (0, index);
      String pays = idComposant.substring (index + 1);
      locale = new Locale (langue, pays);
      FacesContext.getCurrentInstance ().getViewRoot ().setLocale (locale);
    }
  }
}
index8.xhtml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">
<f:view locale="#{beanInter.locale}">
  <h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Insert title here</title>
  </h:head>
  <h:body>
    <p>
      <h:outputLabel value="#{ficMess.bonjour}" />
    </p>
    <h:form>
      <h:panelGrid columns="3" width="50%">
        <h:outputLabel id="languageLabel" value="Choix de la langue :" />
        <h:commandButton id="fr_FR" style="width: 60px;height: 40px;"
          value="Français" actionListener="#{beanInter.ChoixDeLaLangue}" />
        <h:commandButton id="en_US" style="width: 60px;height: 40px;"
          value="Anglais" actionListener="#{beanInter.ChoixDeLaLangue}" />
      </h:panelGrid>
    </h:form>
  </h:body>
</f:view>
</html>

Rendu à la française : Rendu fr_F

Rendu à l'anglaise : Rendu en_US

lang/java/i18n.txt · Dernière modification : 2020/05/11 00:07 de root