JSP - Internacionalização | i18n | l10n

Neste capítulo, discutiremos o conceito de Internacionalização em JSP. Antes de prosseguirmos, vamos entender os três termos importantes a seguir -

  • Internationalization (i18n) - Isso significa permitir que um site forneça diferentes versões de conteúdo traduzido para o idioma ou nacionalidade do visitante.

  • Localization (l10n) - Isso significa adicionar recursos a um site para adaptá-lo a uma região geográfica ou cultural específica, por exemplo, a tradução de hindi para um site.

  • locale- Esta é uma determinada região cultural ou geográfica. Geralmente é referido como um símbolo de idioma seguido por um símbolo de país, que são separados por um sublinhado. Por exemplo, "en_US"representa a localidade em inglês dos EUA.

Há uma série de itens que devem ser atendidos durante a construção de um site global. Este tutorial não fornecerá detalhes completos sobre isso, mas fornecerá um bom exemplo de como você pode oferecer sua página da Web em diferentes idiomas para a comunidade da Internet, diferenciando sua localização, ou seja, local.

Um JSP pode obter a versão apropriada do site com base na localidade do solicitante e fornecer a versão apropriada do site de acordo com o idioma, cultura e requisitos locais. A seguir está o método do objeto de solicitação que retorna o objeto Locale.

java.util.Locale request.getLocale()

Detectando localidade

A seguir estão os métodos de localidade importantes que você pode usar para detectar requester's location, language e claro locale. Todos os métodos a seguir exibem o nome do país e o nome do idioma definidos no navegador do solicitante.

S.No. Método e Descrição
1

String getCountry()

Este método retorna o código do país / região em maiúsculas para este local no formato ISO 3166 de 2 letras.

2

String getDisplayCountry()

Este método retorna um nome para o país da localidade apropriado para exibição ao usuário.

3

String getLanguage()

Este método retorna o código do idioma em minúsculas para este local no formato ISO 639.

4

String getDisplayLanguage()

Este método retorna um nome para o idioma do local apropriado para exibição ao usuário.

5

String getISO3Country()

Este método retorna uma abreviação de três letras para o país desta localidade.

6

String getISO3Language()

Este método retorna uma abreviação de três letras para o idioma deste local.

Exemplo

O exemplo a seguir mostra como exibir um idioma e país associado para uma solicitação em um JSP -

<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>
<%
   //Get the client's Locale
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>

<html>
   <head>
      <title>Detecting Locale</title>
   </head>

   <body>
      <center>
         <h1>Detecting Locale</h1>
      </center>
      
      <p align = "center">
         <% 
            out.println("Language : " + language  + "<br />");
            out.println("Country  : " + country   + "<br />");
         %>
      </p>
   </body>
</html>

Configuração de idiomas

Um JSP pode gerar uma página escrita em um idioma da Europa Ocidental, como inglês, espanhol, alemão, francês, italiano, holandês, etc. Aqui é importante definir o cabeçalho Content-Language para exibir todos os caracteres corretamente.

Outro ponto importante é exibir todos os caracteres especiais usando entidades HTML; por exemplo,"&#241;" representa "ñ"e "&#161;" representa "¡" como segue -

<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>

<%
   // Set response content type
   response.setContentType("text/html");
   
   // Set spanish language code.
   response.setHeader("Content-Language", "es");
   String title = "En Español";
%>

<html>
   <head>
      <title><%  out.print(title); %></title>
   </head>
   
   <body>
      <center>
         <h1><%  out.print(title); %></h1>
      </center>
      
      <div align = "center">
         <p>En Español</p>
         <p>¡Hola Mundo!</p>
      </div>
   </body>
</html>

Datas específicas da localidade

Você pode usar o java.text.DateFormat classe e sua estática getDateTimeInstance( )método para formatar data e hora específicas para local. A seguir está o exemplo que mostra como formatar datas específicas para um determinado local -

<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>
<%@ page import = "java.text.DateFormat,java.util.Date" %>

<%
   String title = "Locale Specific Dates";
   
   //Get the client's Locale
   Locale locale = request.getLocale( );
   
   String date = DateFormat.getDateTimeInstance(
      DateFormat.FULL, 
      DateFormat.SHORT, 
      locale).format(new Date( ));
%>

<html>
   
   <head>
      <title><% out.print(title); %></title>
   </head>
   
   <body>
      <center>
         <h1><% out.print(title); %></h1>
      </center>
      
      <div align = "center">
         <p>Local Date: <%  out.print(date); %></p>
      </div>
   </body>
</html>

Moeda específica da localidade

Você pode usar o java.txt.NumberFormat classe e sua estática getCurrencyInstance( )método para formatar um número, como um tipo longo ou duplo, em uma moeda específica do local. A seguir está o exemplo que mostra como formatar uma moeda específica para um determinado local -

<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>
<%@ page import = "java.text.NumberFormat,java.util.Date" %>

<%
   String title = "Locale Specific Currency";
   
   //Get the client's Locale
   Locale locale = request.getLocale( );
   
   NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
   String formattedCurr = nft.format(1000000);
%>

<html>
   
   <head>
      <title><% out.print(title); %></title>
   </head>
   
   <body>
      <center>
         <h1><% out.print(title); %></h1>
      </center>
      
      <div align = "center">
         <p>Formatted Currency: <%  out.print(formattedCurr); %></p>
      </div>
   </body>
</html>

Porcentagem específica da localidade

Você pode usar o java.txt.NumberFormat classe e sua estática getPercentInstance( )método para obter a porcentagem específica do local. O exemplo a seguir mostra como formatar a porcentagem específica para um determinado local -

<%@ page import = "java.io.*,java.util.Locale" %>
<%@ page import = "javax.servlet.*,javax.servlet.http.* "%>
<%@ page import = "java.text.NumberFormat,java.util.Date" %>

<%
   String title = "Locale Specific Percentage";
   
   //Get the client's Locale
   Locale locale = request.getLocale( );
   
   NumberFormat nft = NumberFormat.getPercentInstance(locale);
   String formattedPerc = nft.format(0.51);
%>

<html>
   
   <head>
      <title><% out.print(title); %></title>
   </head>
   
   <body>
      <center>
         <h1><% out.print(title); %></h1>
      </center>
      
      <div align = "center">
         <p>Formatted Percentage: <%  out.print(formattedPerc); %></p>
      </div>
   </body>
</html>