=====Eclipse=====
Voir la page d'Eclipse pour configurer [[ide:eclipse:tomcat#configuration_de_la_locale_de_tomcat|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''.
[[https://docs.oracle.com/javase/tutorial/i18n/intro/steps.html|Internationalizing the Sample Program]] {{ :lang:java:i18n:internationalizing_the_sample_program_the_java_tutorials_internationalization_introduction_2020-04-26_11_02_43_pm_.html |Archive du 2011 le 26/04/2020}}
Les fichiers de traduction sont placés dans le dossier ''src/bundles/'' avec l'extension ''.properties''.
bonjour:Hello you.
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.
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." } };
}
}
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=====
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 ("");
out.println ("");
out.println ("");
out.println ("");
out.println ("Insert title here");
out.println ("");
out.println ("");
Locale locale = new Locale ("fr", "FR");
// Traduction dans des fichiers
ResourceBundle messages = ResourceBundle.getBundle ("bundles.messages", locale);
out.println (messages.getString ("bonjour"));
out.println ("
");
locale = new Locale ("en", "US");
// Traduction dans des classes
messages = ResourceBundle.getBundle ("com.llgc.po.Text", locale);
out.println (messages.getString ("bonjour"));
out.println ("");
out.println ("");
}
/**
* @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=====
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"
import="java.util.Locale, java.util.ResourceBundle"%>
Insert title here
<%
// Traduction dans des fichiers
Locale locale = new Locale ("fr", "FR");
ResourceBundle messages = ResourceBundle.getBundle ("bundles.messages", locale);
out.println (messages.getString ("bonjour"));
%>
<%
// Traduction dans des classes
locale = new Locale ("en", "US");
messages = ResourceBundle.getBundle ("com.llgc.po.Text", locale);
out.println (messages.getString ("bonjour"));
%>
Rendu :
Soyez le bienvenu.
Hello you.
=====JSP+JSTL=====
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
Insert title here
=====JSF=====
====Exemple 1====
Définition des locales connues et de celle par défaut :
en_US
fr_FR
Insert title here
Dans le ''basename'', il s'agit bien du nom de la classe sans la référence locale (''fr_FR'', ''en_US'', …).
====Exemple 2====
en_US
fr_FR
bundles.messages
ficMess
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);
}
}
}
Insert title here
Rendu à la française :
{{:lang:java:i18n:rendu_jsf_fr1.png|Rendu fr_F}}
Rendu à l'anglaise :
{{:lang:java:i18n:rendu_jsf_en1.png|Rendu en_US}}