4
respostas

Internacionalização

Estou fazendo esse curso no Ubuntu Linux, mas não domino completamente esse sistema. Ele está configurado para português do Brasil, pois todos os menus estão corretos. Estou usando como navegador padrão o Mozilla Firefox. Mesmo alterando o idioma do navegador no about:config na chave general.useragent.locale e colocando o valor "en-US", apenas o link aparece em inglês. O que pode estar errado?

4 respostas

Oi Eduardo, tudo bem? Desculpa, não entendi bem sua dúvida. O link fica em inglês, mas a mensagem de boas vindas não, é isso?

Já vefiricou as chames do arquivo messages_en.properties com o fmt da sua JSP? Um único caractere diferente pode fazer dar errado exibir a mensage.

Pode colar o trecho da JSP aqui pra gente dar uma olhada?

Segue a minha JSP:

<%@page import="br.com.caelum.produtos.modelo.Produto"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<head>
<script type="text/javascript" src="<c:url value="/js/jquery.js"/>"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <script type="text/javascript">
        function removeProduto(id){
            $("#mensagem").load('<c:url value="/produto/remove"/>' + '?produto.id=' + id);
            $("#produto" + id).remove();
        }
    </script>

    <h1>Produtos</h1>
    <h2><fmt:message key="messages.bemvindo"/></h2>
    <hr />
    <table width="100%">
        <tr>
            <td width="20%">Nome</td>
            <td>Preco</td>
            <td>Descricao</td>
            <td>Data de Inicio da Venda</td>
            <td>Usado?</td>
            <td width="20%">Remover?</td>
        </tr>
        <c:forEach var="p" items="${produtoList }" varStatus="st">
            <tr id="produto${p.id }">
                <td>${ p.nome.toUpperCase()}</td>
                <td>
<%--                     <fmt:setLocale value="pt-BR"/> --%>
                    <fmt:formatNumber value="${p.preco}"  currencySymbol="R$" type="currency" />
                </td>
                <td>${p.descricao }</td>

                <td>
                    <fmt:formatDate value="${p.dataInicioVenda.time}" pattern="EEEE, dd 'de' MMMM 'de' yyyy" />
                </td>
                <c:choose>
                    <c:when test="${p.usado }">
                        <td>Sim</td>
                    </c:when>
                    <c:otherwise>
                        <td>Não</td>
                    </c:otherwise>
                </c:choose>
                <td><a href="#" onclick="return removeProduto(${p.id})">Remover</a></td>
            </tr>
        </c:forEach>

    </table>

    <a href="<c:url value='/produto/formulario' />"><fmt:message key="messages.novoProduto" /></a>

</body>
</html>

Oi Eduardo, tudo bem?

Se entendi bem, seu sistema está em português e você está querendo testar a internacionalização em inglês.

O fmt:message sabe a língua através do locale que é enviado na requisição. Arrisco que seja esse cara, no meu caso tirei do chrome:

Accept-Language:pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4,es;q=0.2,de;q=0.2

No caso do firefox, pra mim funcionou quando alterei a chave intl.accept_languages, no mesmo local onde vc alterou a outra chave.

Como meu sistema está em ingles, eu alterei pra pt-BR, pt. O valor antes era en-US, en (english).

Atualizei a pagina e já funcionou! ;)


Você pode forçar o local no servidor também, no web.xml:

<context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.locale</param-name>
    <param-value>en_US</param-value>
</context-param>

Nesse caso aí sempre vai exibir em ingles, independente do que o browser pedir.

Era isso mesmo? Testa ai se funciona?

Abraços!

Outra coisa, percebi que você disse que apenas o link aparece em ingles.

Alguma chance do nome da chave estar errado no arquivo messages_en.properties, etc?