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

Internacionalização Servlet

Ferramentas online

  • Antes de começarmos, vamos ver três termos importantes:18n):Isso significa que um site oferece versões de conteúdo traduzidas em diferentes idiomas ou nacionalidades do visitante.

  • Localização (l10n):Isso significa adicionar recursos ao site para torná-lo adequado para uma região geográfica ou cultural específica, por exemplo, traduzir o site para o Hindi.

  • Configuração regional (locale):Esta é uma cultura ou região geográfica especial. Geralmente se refere a um símbolo de idioma seguido de um sublinhado e um símbolo de país. Por exemplo, "en_US" representa a configuração regional do inglês para os EUA.

Ao criar um site global, há algumas considerações a serem tomadas. Este tutorial não explicará todos os detalhes dessas considerações, mas ele mostrará como fazer com que uma página da web seja apresentada em diferentes idiomas por meio de localização diferenciada (ou seja, configurações regionais).

Servlet pode escolher a versão apropriada do site com base nas configurações regionais do solicitante e fornecer a versão apropriada do site com base no idioma, cultura e necessidades locais. A seguir estão os métodos retornados pelo objeto request que retornam o objeto Locale.

java.util.Locale request.getLocale()

Detecção de configurações regionais

A seguir está uma lista das configurações regionais importantes, que você pode usar para detectar a localização, idioma e configurações regionais do solicitante. Todos os métodos a seguir mostram o nome do país e o nome do idioma configurados no navegador do solicitante.

Número de sérieMétodo & Descrição
1String getCountry()
Este método usa 2 Uma grande letra ISO 3166 Formato retorna o código do país da configuração regional/
2String getDisplayCountry()
3String getLanguage()
Este método retorna o código ISO de três letras da configuração regional em minúsculas. 639
4String getDisplayLanguage()
53Country()
Este método retorna a abreviação de três letras do país da configuração regional.
63Language()
Este método retorna a abreviação de três letras do idioma da configuração regional.

Exemplo online

Este exemplo demonstra como exibir o idioma e o país relacionados a uma solicitação:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class GetLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
      // Obter a Configuração Regional do Cliente
      Locale locale = request.getLocale();
      String language = locale.getLanguage();
      String country = locale.getCountry();
      // Configurar o Tipo de Conteúdo da Resposta
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      String title = "Detecção de configuração regional";
      String docType = "<!DOCTYPE html> \n";
      out.println(docType +
        "<html>\n" +
        "<head><title>" + title + "</title></head>\n" +
        "<body bgcolor="#f0f0f0">\n" +
        "<h1 align="center">" + language + "</h1>\n" +
        "<h2 align="center">" + country + "</h2>\n" +
        "</body></html>");
  }
}

Configuração de idioma

Servlet pode emitir páginas escritas em idiomas da Europa Ocidental (como inglês, espanhol, alemão, francês, italiano, holandês, etc.). Aqui, para exibir corretamente todos os caracteres, configure o Content-O cabeçalho Language é muito importante.

O segundo ponto é usar entidades HTML para exibir todos os caracteres especiais, por exemplo, "ñ" representa "ñ", "¡" representa "¡", conforme mostrado a seguir:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
public class DisplaySpanish extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // Configurar o Tipo de Conteúdo da Resposta
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Configurar código de idioma espanhol
    response.setHeader("Content-Language", "pt");
    String title = "Em Português";
    String docType = "<!DOCTYPE html> \n";
     out.println(docType +
     "<html>\n" +
     "<head><title>" + title + "</title></head>\n" +
     "<body bgcolor="#f0f0f0">\n" +
     "<h1>" + "Em Português:" + "</h1>\n" +
     "<h1>" + "¡Olá Mundo!" + "</h1>\n" +
     "</body></html>");
  }
}

Data específica do ambiente regional

Você pode usar a classe java.text.DateFormat e o método estático getDateTimeInstance() para formatar datas e horários específicos do ambiente regional. Abaixo está um exemplo de como formatar uma data específica de um ambiente regional dado:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
public class DateLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // Configurar o Tipo de Conteúdo da Resposta
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obter a Configuração Regional do Cliente
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
                                  DateFormat.FULL, 
                                  DateFormat.SHORT, 
                                  locale).format(new Date( ));
    String title = "Data específica do locale";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + date + "</h1>\n" +
      "</body></html>");
  }
}

Moeda específica do locale

Você pode usar a classe java.text.NumberFormat e seu método estático getCurrencyInstance() para formatar números (por exemplo, tipos long ou double) como moeda específica do locale. O exemplo a seguir demonstra como formatar moeda específica de um locale给定:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class CurrencyLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // Configurar o Tipo de Conteúdo da Resposta
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obter a Configuração Regional do Cliente
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);
    String title = "Moeda específica do locale";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + formattedCurr + "</h1>\n" +
      "</body></html>");
  }
}

Porcentagem específica do locale

Você pode usar a classe java.text.NumberFormat e seu método estático getPercentInstance() para formatar porcentagens específicas do locale. O exemplo a seguir demonstra como formatar porcentagens específicas de um locale给定:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
public class PercentageLocale extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            throws ServletException, IOException
  {
    // Configurar o Tipo de Conteúdo da Resposta
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // Obter a Configuração Regional do Cliente
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);
    String title = "Percentual Específico da Região";
    String docType = "<!DOCTYPE html> \n";
      out.println(docType +
      "<html>\n" +
      "<head><title>" + title + "</title></head>\n" +
      "<body bgcolor="#f0f0f0">\n" +
      "<h1 align="center">" + formattedPerc + "</h1>\n" +
      "</body></html>");
  }
}