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!