Servlets - Internacionalização
Antes de prosseguirmos, deixe-me explicar três termos importantes -
Internationalization (i18n) - Isso significa habilitar um site para fornecer diferentes versões de conteúdo traduzido para o idioma ou nacionalidade do visitante
Localization (l10n) - Isso significa adicionar recursos a um site para se adaptar a uma determinada região geográfica ou cultural.
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 é separado por um sublinhado. Por exemplo, "en_US" representa a localidade em inglês dos EUA.
Existem vários itens que devem ser tomados em consideração durante a construção de um website global. Este tutorial não fornece detalhes completos sobre isso, mas dá 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, localidade.
Um servlet 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 a localização do solicitante, idioma e, claro, localidade. Todos os métodos abaixo exibem o nome do país e o nome do idioma definidos no navegador do solicitante.
Sr. Não. | 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
Este exemplo mostra como você exibe um idioma e país associado para 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 {
//Get the client's Locale
Locale locale = request.getLocale();
String language = locale.getLanguage();
String country = locale.getCountry();
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Detecting Locale";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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 idiomas
Um servlet 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 ContentLanguage para exibir todos os caracteres corretamente.
O segundo ponto é exibir todos os caracteres especiais usando entidades HTML, por exemplo, "& # 241;" representa "ñ" e "& # 161;" representa "¡" da seguinte forma:
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language", "es");
String title = "En Español";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1>" + "En Español:" + "</h1>\n" +
"<h1>" + "¡Hola Mundo!" + "</h1>\n" +
"</body>
</html>"
);
}
}
Datas específicas da localidade
Você pode usar a classe java.text.DateFormat e seu método getDateTimeInstance () estático para formatar a data e a hora específicas para o local. A seguir está o exemplo que mostra como formatar datas específicas para um determinado local -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
String date = DateFormat.getDateTimeInstance(DateFormat.FULL,
DateFormat.SHORT, locale).format(new Date( ));
String title = "Locale Specific Dates";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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 da localidade
Você pode usar a classe java.txt.NumberFormat e seu método getCurrencyInstance () estático 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 -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
String formattedCurr = nft.format(1000000);
String title = "Locale Specific Currency";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\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 da localidade
Você pode usar a classe java.txt.NumberFormat e seu método getPercentInstance () estático para obter a porcentagem específica do local. A seguir está o exemplo que mostra como formatar a porcentagem específica para um determinado local -
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 {
// Set response content type
response.setContentType("text/html");
PrintWriter out = response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale( );
NumberFormat nft = NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
String title = "Locale Specific Percentage";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";
out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + formattedPerc + "</h1>\n" +
"</body>
</html>"
);
}
}