Configurando o idioma do Report Viewer - André Alves de Lima
Quando instalamos aplicações desktop em computadores com sistema operacional que não esteja traduzido para português, temos que nos atentar para a globalização das nossas aplicações. Em alguns casos, os controles podem vir formatados em inglês (ou no formato do idioma que estiver configurado no computador). Se a aplicação conta com relatórios do Report Viewer, esse é um ponto que devemos prestar bastante atenção, uma vez que, por padrão, os relatórios trazem o formato de datas e números em inglês. Como fazemos para alterar o idioma do Report Viewer? É isso que eu mostro para você no vídeo de hoje:
Alterando o idioma do controle
A alteração do idioma do Report Viewer pode ser dividida em duas partes. Primeiro, temos a tradução do controle em si (labels, tooltips, mensagens de erro, etc). E, depois, temos a configuração do idioma do relatório (para que as datas, números e moedas venham no formato correto).
Para alterarmos o idioma do controle do Report Viewer, temos que configurar o idioma da aplicação como um todo. Fazemos isso setando a cultura da thread principal da aplicação. Isso pode ser feito no método "main" ou no construtor do formulário principal da sua aplicação:
var cultura = new System.Globalization.CultureInfo("pt-BR");
System.Threading.Thread.CurrentThread.CurrentUICulture = cultura;
Dim Cultura = New System.Globalization.CultureInfo("pt-BR")
System.Threading.Thread.CurrentThread.CurrentCulture = Cultura
System.Threading.Thread.CurrentThread.CurrentUICulture = Cultura
E com isso o controle do Report Viewer exibirá mensagens, tooltips, etc. no idioma configurado:
Alterando o idioma do relatório
Dentro do relatório, nós provavelmente teremos TextBoxes com formatação de data/hora, número e moeda. Se nós não configurarmos um idioma específico dentro do relatório, muito provavelmente o Report Viewer utilizará as informações de cultura do idioma inglês americano. Ou seja, as datas aparecerão invertidas e os números com ponto como separador (ao invés de vírgula).
Para que esses tipos de controles venham com a formatação correta, nós temos que alterar a propriedade "Language" do relatório:
Ao fazermos isso, as datas e números aparecerão no formato correto. Porém, se tivermos formatado um TextBox com formato monetário, ele ficará "travado" para o formato configurado no computador de desenvolvimento (no meu caso, em Euros):
Se quisermos que as moedas também venham formatadas respeitando o idioma selecionado no relatório, nós teremos que configurar uma expressão para fazer a formatação manual (ao invés de fazermos a formatação como indicado acima). A expressão para esses tipos de TextBox seria a seguinte:
=String.Format("{0:c}", Fields!NomeDoCampo.Value)
Aí sim os campos com moedas serão formatados da maneira correta:
Sincronizando o idioma do relatório com o idioma da aplicação
Para não termos que configurar o idioma em dois lugares diferentes (na aplicação e depois em cada um dos relatórios), nós podemos configurar o idioma dos relatórios de maneira dinâmica, de forma que ele respeite automaticamente o idioma configurado na aplicação.
Se você procurar por esse assunto na internet, você encontrará muita gente sugerindo as mais diversas gambiarras para solucionar essa questão (como passar o idioma para o relatório via parâmetro, por exemplo). Porém, isso é algo muito fácil de ser resolvido. Basta configurarmos o idioma do relatório com uma expressão que retornará o idioma da aplicação. Essa informação está disponível dentro de "Built-in fields" na janela de expressões:
No vídeo de hoje você conferiu o esquema de tradução de relatórios do Report Viewer. Primeiramente, conferimos como podemos configurar o idioma do controle do Report Viewer. Em seguida, nós aprendemos a configurar os formatos de hora, número e moeda dos nossos relatórios. Por fim, nós vimos como sincronizar o idioma da aplicação e dos relatórios.
E você, já teve problemas com os idiomas e formatações no Report Viewer? Conseguiu resolver esses problemas seguindo os passos que eu indiquei no vídeo? Ficamos aguardando as suas experiências na caixa de comentários logo abaixo.
Aplicações Android com Xamarin – Parte 3 de N – Classes de modelo e primeira tela Trabalhando com data binding no Windows Forms
8 thoughts on "Configurando o idioma do Report Viewer"
acredito que pode ajudar muito para aqueles que usam outra moeda. obg
Replace(FormatCurrency(Parameters!Dinheiro.Value),"R$","Kz ")
25 de janeiro de 2018 às 5:28
Só não entendi se foi uma dúvida ou uma dica que você está querendo compartilhar aqui conosco.. Se for uma dúvida, explique com maiores detalhes, por favor..
Na verdade é uma dica. eu estava com dificuldades em converter um valor na moeda angolana Kwanza (kz) mais vinha sempre em R$ dai eu fiz este codigo dentro da expressao. formato em moeda e faço o replce.
penso que serve para outras moedas ou coversões de string
Maravilha, Henrique! Agora entendi.. Muito obrigado por compartilhar aqui.. :)
Espero que ainda esteja disposto a esclarecer dúvidas neste antigo post!
Utilizo CRViewer do VS2015.
Me deparei com um obstáculo, que pode até parecer ridículo para muitos, porém não estou encontrando o "Built-in fields – Language" para configurar o idioma do relatório.
Onde se encontra isso no CRViewer do VS2015? Existe esta opção?
23 de agosto de 2018 às 15:54
Que eu saiba, em relatórios do Crystal Reports, ele sempre respeita o idioma que está setado na aplicação.. Ou seja, se a "Culture" da aplicação está setada em português, o viewer e as formatações serão exibidas em português..
É isso que você está querendo dizer? Se não for isso, me explica melhor aí..
A Culture não é automática não.
Pelo menos em meus relatórios não está funcionando assim.
O problema é que não encontrei o "Built-in fields – Language"
Mas passei a usar o "Special Fields – Content Location" e setei todos os labels do report como fórmulas, então dependendo do "Content Location" mostro o label no idioma correto.
Achei outra solução viável.
Muito obrigado pelo retorno.. Estranho você não ter conseguido encontrar o "built in fields".. Mas, de qualquer forma, o que importa é que você conseguiu resolver o problema.. :)