Локализация Crystal Reports

    • WinForms
    • .NET
    • C#
    • Crystal Reports
    • Resources
    • Localization
  • 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 на русском языке.

See Also