English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Internacionalização JSP

Antes de começar, é necessário explicar alguns conceitos importantes:

  • Internacionalização (i18n): Indica que uma página exibe diferentes versões de tradução com base no idioma ou no país do visitante.
  • Localização (l10n): Adicionar recursos ao site para torná-lo adequado para diferentes regiões e culturas. Por exemplo, a versão em hindi do site.
  • Região: é uma região ou cultura específica, geralmente considerada como um sinal de idioma e um sinal de país conectados por sublinhado. Por exemplo, "en_US" representa a região de inglês dos EUA.

Se você deseja criar um site globalizado, precisa se preocupar com uma série de projetos. Este capítulo detalha como lidar com problemas de internacionalização e fornece alguns exemplos para aprofundar o entendimento.

O contêiner JSP pode fornecer a versão correta da página com base no atributo locale do request. A seguir, é fornecida a sintaxe de como obter o objeto Locale através do objeto request:

java.util.Locale request.getLocale() 

Detecção de Locale

A tabela a seguir lista os métodos importantes do objeto Locale, usados para detectar a região e o idioma do objeto request. Todos esses métodos serão exibidos no navegador com o nome do país e do idioma:

Número Método & Descrição
1 String getCountry()

Retorna o país/Código da região em maiúsculas, ou ISO 3166 2-Formato da região com letras
2 String getDisplayCountry()

Retorna o nome do país a ser exibido para o usuário
3 String getLanguage()

Retorna o código do idioma em minúsculas, ou ISO 639 Formato da região
4 String getDisplayLanguage()

Retorna o nome do idioma a ser exibido para o usuário
5 String getISO3Country()

Retorna o nome do país3Abreviação
6 String getISO3Language()

Retorna o nome do idioma3Abreviação

Demonstração de exemplo

Este exemplo nos ensina como exibir idioma e país no JSP:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
   //Obtendo informações de regionalização do cliente
   Locale locale = request.getLocale();
   String language = locale.getLanguage();
   String country = locale.getCountry();
%>
<html
<head
<title>Detectando Local</title>
</head>
<body
<center>
<h1>Detectando Local</h1>
</center>
<p align="center">
<% 
   out.println("Idioma: " + language  + "<br />");
   out.println("País: " + country   + "<br />");
%>
</p>
</body>
</html>

Configuração de idioma

O JSP pode usar idiomas da Europa Ocidental para exibir uma página, como inglês, espanhol, alemão, francês, italiano etc. Portanto, configurar o Content-É importante definir o cabeçalho de informações de idioma para exibir todos os caracteres corretamente.

O segundo ponto é que é necessário usar entidades de caracteres HTML para exibir caracteres especiais, como "ñ" representa ñ,"¡" representa ¡ :

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%
    // Definir tipo de conteúdo da resposta
    response.setContentType("text/html");
    // Definir código de idioma espanhol.
    response.setHeader("Content"-"Language", "pt");
    String title = "Em Português";
%>
<html
<head
<title><%  out.print(title); %></title>
</head>
<body
<center>
<h1><%  out.print(title); %></h1>
</center>
<div align="center">
<p>Em Português</p>
<p>?Hola Mundo!</p>
</div>
</body>
</html>

Data específica da região

Pode-se usar a classe java.text.DateFormat e seu método estático getDateTimeInstance() para formatar datas e horários. O exemplo a seguir mostra como formatar datas e horários com base na região específica:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.DateFormat,java.util.Date" %>
<%
    String title = "Datas específicas da região";
    //Obter o Locale do Cliente
    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>Data local: <%  out.print(date); %></p>
</div>
</body>
</html>

Moeda específica da região

Pode-se usar a classe java.text.NumberFormat e seu método estático getCurrencyInstance() para formatar números. Por exemplo, tipos long e double em moedas específicas da região. O exemplo a seguir mostra como formatar moedas com base na região específica:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Moeda específica da região";
    //Obter o Locale do Cliente
    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>Moeda formatada: <%  out.print(formattedCurr); %></p>
</div>
</body>
</html>

Porcentagem específica da região

Pode-se usar a classe java.text.NumberFormat e seu método estático getPercentInstance() para formatar porcentagens. O exemplo a seguir nos mostra como formatar porcentagens com base na região específica:

<%@ page import="java.io."*,java.util.Locale" %>
<%@ page import="javax.servlet.*,javax.servlet.http.* "%>
<%@ page import="java.text.NumberFormat,java.util.Date" %>
<%
    String title = "Porcentagem Específica do Locale";
    //Obter o Locale do Cliente
    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>Porcentagem Formada: <%  out.print(formattedPerc); %></p>
</div>
</body>
</html>