Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Mensagem de link não muda

Fiz um teste aqui e sempre que a mensagem é colocada na tag ela não acha o arquivo de internacionalização Se eu repetir a tag (fmt:message) for a da tag tudo ocorre bem, mas dentro dela, mesmo deletando o messages_pt, o texto não é encontrado

7 respostas

Oi Paulo, quando você fala de dentro e fora da tag, é uma tag html? Pode postar o código aqui? Peço isso porque realmente não devia influenciar em nada.

Ta na mão

<%@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>
    <h3><fmt:message key="mensagem.bemvindo" /></h3>
    <div id="mensagem"></div>
    <table width="100%">
        <tr>
            <td>Contatdor</td>
            <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>${st.count}</td>
                <td>${p.nome.toUpperCase()}</td>
                <td><fmt:setLocale value="pt_br"/><fmt:formatNumber value="${p.preco}" type="currency"/></td>
                <td>${p.descricao}</td>
                <td><fmt:formatDate pattern="EEEE,dd'de'MM'de'yyyy" value="${p.dataInicioVenda.time}"/></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>
    <!-- inline de c:url -->
    <a href="<c:url value='/produto/formulario'></c:url>">
        <fmt:message key="mensagem.novoProduto"/>
    </a>

    <c:import url="../_common/rodape.jsp" />
</body>
</html>

Ali no 'inline c:url' o fmt dentro da tag , a mensagem não muda para o inglês. Já limpei cache, já acendi vela... e nada

Opa Paulo, olhando o código eu realmente não consegui identificar o que pode ta errado, dado que nos outros lugares funciona. Vc chegou a descobrir?

Infelizmente ainda não descobri o porquê. Basicamente o meu Talvez alguma inconsistência? Testei em dois computadores diferentes (o mesmo código, importado do meu git) e o resultado foi o mesmo.

Acho que é algum outro detalhe, o htm em si não tem nenhuma influencia sobre a jstl.. um é interpretado do lado cliente e outro do lado do servidor. A tag não é interpretada ou a mensagem que aparece ta errada? Tem o projeto em algum lugar pra que eu possa dar uma olhada?

solução!

Normal, Descobri o seu problema, voce força o locale para pt_br. Dai em diante tudo é pt_br.

Voce esta setando:

<fmt:setLocale value="pt_br"/><fmt:formatNumber value="${p.preco}" type="currency"/></td>

Remova:

<fmt:setLocale value="pt_br"/>

Um "workaround" (me parece gambiarra), mas na minha opinião forçar o locale também é, risos. Guarda o locale antes de trocar em uma variável. Força a mudança para ter o resultado do currency Depois coloca de volta o locale.

 <td>
    <c:set var="padrao" value="${pageContext.request.locale.language}"></c:set>
<fmt:setLocale value="pt_br"/>
<fmt:formatNumber value="${p.preco}" type="currency"/>
        <fmt:setLocale value="${padrao}"/>    
</td>

Outra opção é usar um pattern:

R$ <fmt:formatNumber type = "number" 
         pattern = "###,###,###,##0.00" value = "${p.preco}" />

Fala Mario; Dito e feito. O que estava causando o problema era, realmente, o locale. Eu não sabia que ele ia causar tamanha dor de cabeça, e pensei que respeitaria os limites da tag Agradeço à todos pela ajuda!