Локализация Crystal Reports
- modified:
- reading: 2 minutes
Русскоязычная информация о том как можно руссифицировать Crystal Report. Полезна тем, кто использует Crysral Report в русскоязычных программах как основной генератор отчетов.
Тот кто использует Crystal Report знают, что русифицировать интерфейс "на лету" способа нет. Но есть возможность локализовать ресурсы. Создать свою библиотеку с русскими текстами, положить ее в необходимое место и тогда CR сам возьмет ваши ресурсы, при условии указания правильного Culture в вашем приложении.
Вот в MSDN есть некая информация об этом:
http://msdn.microsoft.com/ru-ru/library/ms227633.aspx
А так в основном моя статья это перевод документации, которая размещена по адрессу (в свое время она мне сильно помогла):
http://marian.ideaz.sk/crystal/
Теперь давайте поподробнее. Я рассматриваю пример как можно локализовать CrystalReportView.
Первое что нам необходимо сделать - это найти существующую библиотеку ресурсов, которую мы будем локализовывать. Ну или создать файл ресурсов.
Вот как это можно сделать. Находим файл CrystalDecisions.Windows.Forms.dll в папке "C:\Program Files\Common Files\Business Objects\2.7\Managed\" (у вас эта папка может отличаться, все зависит от версии вашего Crystal Report либо от вашей версии Windows).
Далее нам необходима программа MSIL Disassembler, которая входит в состав Microsoft .NET Framework SDK v2.0, при ее помощи мы и будем забирать из файла ресурсы. Создайте временную папку, например, c:\temp, положите туда файл CrystalDecisions.Windows.Forms.dll.
Далее откройте командную строку (Start->Run...->cmd.exe) и выполните в ней последовательно три команды
cd c:\reports
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ildasm.exe" CrystalDecisions.Windows.Forms.dll /OUT=CrystalDecisions.Windows.Forms.il /ITEM=
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\resgen.exe" CrystalDecisions.Windows.Forms.CRViewerSys.resources CrystalDecisions.Windows.Forms.CRViewerSys.resx Командную строку пока не закрывайте, она нам еще пригодиться. В папке c:\reports у нас теперь находится множество файлов, можете удалить все кроме двух файлов:
CrystalDecisions.Windows.Forms.CRViewerSys.resources
CrystalDecisions.Windows.Forms.CRViewerSys.resx
Открываем оставшийся файл c расширением resx, в нем содержатся строковые ресурсы от CR. Править этот файл мы можем, например, в MS Visual Studio, но можно открыть его и в блокноте. Переводим все значения, которые стоят в тегах <value>...</value>, сохраняем.
Запускаем в командной строке последовательно команды:
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\resgen.exe" /compile CrystalDecisions.Windows.Forms.CRViewerSys.resx,CrystalDecisions.Windows.Forms.resources
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe" /t:lib /embed:CrystalDecisions.Windows.Forms.resources /culture:ru /out:CrystalDecisions.Windows.Forms.custom_resources.dll
Смотрим в папку - видим там файл CrystalDecisions.Windows.Forms.custom_resources.dll - это и есть необходимый нам файл ресурсов, который можно использовать теперь в приложении, использующем Crystal Report.
В моем случае у меня есть WinForms приложение, которое находится, к примеру в папке c:\MyApp\. Нам необходимо создать папку ru в папке c:\MyApp\ (корневой папке приложения), кладем туда получившийся файл ресурсов CrystalDecisions.Windows.Forms.custom_resources.dll.
Все что остается сделать, это локализовать наше приложение, для этого в коде Main функции добавляем к примеру так:
[STAThread]
private static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
InitCulture();
Application.Run(new MyAppForm());
}
private static void InitCulture()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("ru");
}
Дальше мы должны видеть все переведенные нами надписи во Viewer на русском языке.