Como traduzir textos do componente CrystalReportViewer .net
Neste artigo é apresentada uma forma de se fazer a tradução dos componentes de um crystal report viewer e passa a idéia de como fazer algumas edições simples de controle em tempo de execução.
O Crystal Reports é uma poderosa ferramenta de desenvolvimento de relatórios que vem juntamente com o visual studio desde a versão X, juntamente com algumas biblioteca que contém objetos para manipularmos: ordenação, fontes de dados, e etc nos relatórios e também para provermos a visualização desses relatório através do programa para usuário, um desse objetos é o controle CrystalReportViewer utilizado para apresentação dos relatórios, nele já temos um navegador e alguma opções de exportação e é utilizado pela maioria dos desenvolvedores que utilizam relatório crystal em aplicações .net, mas os texto em inglês do visualizador pode ser um problema para alguma pessoas, pois não é aceitavel em algumas organizações(como a que eu trabalho por exemplo), e não encontrei até hoje pelo menos, uma forma muito ortodoxa de se fazer a tradução desses textos, então nesse artigo vou dar um exemplo do que poderia ser feito. As implementações estão em c#.
No Visual Studio escolha File->New->Project e escolha o template para Windows Forms.
Vá para o designer do form Criado e expanda a Tool Box se você está com vs 2008 ou 2010 professional(no caso do 2010 o crystal tem que ser baixado separadamente) haverá uma seção rotulada como “Reporting” , escolha o controle CrystalReportViewer e arraste para o form.
Feito isso compile o projeto uma vez e veja que todos ToolTip dos Itens na parte superior estarão em inglês, assim como a nomeclatura da aba principal que estará escrito “Main Report”, o drop down “Zoom” terá também alguns itens em inglês.
Certo, agora vamos criar o método para fazer a tradução, ficará assim:
private void TraduzirCRV(CrystalReportViewer Cntl)
{
foreach (Control Ctl in Cntl.Controls)
{
#region Dicionario
//Aqui está o dicionário para fazer a trudução, para quem quiser o texto em portugues que vai permanecer é só alterar aqui.
Dictionary<string, string> Traducoes = new Dictionary<string, string>();
Traducoes.Add("Export Report", "Exportar");
Traducoes.Add("Print Report", "Imprimir");
Traducoes.Add("Refresh", "Atualizar");
Traducoes.Add("Toggle Parameter Panel", "Invisible");
Traducoes.Add("Toggle Group Tree", "Invisible");
Traducoes.Add("Go to First Page", "Primeira página");
Traducoes.Add("Go to Previous Page", "Página anterior");
Traducoes.Add("Go to Next Page", "Próxima página");
Traducoes.Add("Go to Last Page", "Última página");
Traducoes.Add("Go to Page", "Ir para página");
Traducoes.Add("Find Text", "Procurar");
Traducoes.Add("Zoom", "Zoom");
Traducoes.Add("Close Current View", "Fechar");
Traducoes.Add("Page Width", "Largura da página");
Traducoes.Add("Whole Page", "Página Inteira");
Traducoes.Add("Customize...", "Customizar...");
Traducoes.Add("Current Page No.", "Nr. página atual");
Traducoes.Add("Total Page No.", "Nr. Total páginas");
Traducoes.Add("Zoom Factor", "Nível de zoom");
#endregion Dicionario
#region TraduzindoItens
//Alterando o texto da tabpage principal(Onde está escrito Main Report).
if (Ctl.GetType() == typeof(PageView))
try
{
((TabControl)Ctl.Controls[0]).TabPages[0].Text = "Relatório";
}
catch {
}
//Alterando o texto dos componente que ficam na barra superior.
else if (Ctl.GetType() == typeof(System.Windows.Forms.ToolStrip))
{
foreach (ToolStripItem Ti in ((ToolStrip)Ctl).Items)
{
if (Ti.ToolTipText != null)
{
Ti.ToolTipText = Traducoes[Ti.ToolTipText];
//Aqui eu escondo dois itens da barra superior que no meu contexto são irrelevantes o que mostra uma barra com os parametros
// e o que mostra uma treeview com os grupos do relatório.
if (Ti.ToolTipText == "Invisible")
{
Ti.Visible = false;
}
//Aqui traduzindo os itens dentro do dropdown Zoom.
else if (Ti.ToolTipText == "Zoom" && Ti.GetType() ==typeof(ToolStripDropDownButton))
{
string[,] ItensDD = new string[30, 4];
foreach (ToolStripItem TiF in ((ToolStripDropDownButton)Ti).DropDownItems)
{
try
{
TiF.Text = Traducoes[TiF.Text];
}
catch
{
}
}
}
}
}
}
//Alterando os textos da status bar
else if (Ctl.GetType() == typeof(StatusBar))
{
foreach (StatusBarPanel StBrPnl in ((StatusBar)Ctl).Panels)
{
string Texto = StBrPnl.Text.Substring(0, StBrPnl.Text.IndexOf(":"));
StBrPnl.Text = StBrPnl.Text.Replace(Texto, Traducoes[Texto]);
}
}
#endregion TraduzindoItens
}
}
Agora crie o evento load do form(pode ser criado clicando
duas vezes no formulário) chamando esse método recém criado. private
void Form1_Load(object
sender, EventArgs e) {
TraduzirCRV(crystalReportViewer1); } Pronto agora é só compilar novamente e conferir o resultado, espero ter ajudado,
abraços!
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo