=====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}}