SSRS 报表本地化






4.86/5 (34投票s)
如何本地化 SQL Server Reporting Services 报表

引言
本文演示了如何本地化SSRS报表。虽然SSRS报表是在Visual Studio (.NET IDE - BIDS) 中创建的,但它们不能像普通的VS.NET项目那样进行本地化,因为资源文件无法添加到SSRS项目中。
本地化和全球化是全球访问的任何项目的正常要求。报告作为重要的工具之一,需要支持多种语言的SSRS。本文(以及随附的演示项目)将帮助实现这一点。
背景
对于任何客户群遍布全球的产品,都需要在某个阶段支持本地化。 报告作为任何产品中帮助分析数据的主要部分之一,也需要本地化。
最初,当我听说本地化SSRS报表时,我完全不知道该怎么做! 虽然微软没有提供添加“resx”文件进行本地化的方法,但他们提供了一种使用自定义程序集的方法,这招很有效!
Using the Code
创建一个自定义程序集,该程序集有助于检索所请求参数的本地化值。创建一个具有所需“resx”文件的类库和一个C#代码文件,以便基于传递的区域性名称进行访问。
// Method that retrieves the localized value based on the culture name passed
// param1 ("localeSensitiveResource") -> Resource that needs to be localized
// param2 ("cultureInfoName") -> Culture name in which Resource needs to be localized
// returns -> Localized Value
public static string GetString(string localeSensitiveResource, string cultureInfoName)
{
// Culture formation
CultureInfo ci = new CultureInfo(cultureInfoName);
// Value retrieved from the resource file
return LocalizationStrings.ResourceManager.GetString(localeSensitiveResource, ci);
}
将该类标记为“public static
”,因为它将从外部访问,并且每个实例都从相同位置使用相同的“DLL”。
//Class to retrieve the localized value
public static class LocalizedValue
{
public static string GetString
(string localeSensitiveResource, string cultureInfoName)
{
//
}
}
我已经设置了我的示例数据库表,以便每个员工都有一个与其关联的区域设置。基于区域设置,报告将被本地化。
设计的报告采用员工的ID作为参数,该参数在内部查找关联的区域设置,然后以本地化的SSRS报告向用户显示报告数据。默认情况下,示例报告如下所示

对于报告中的每个标题,都需要使用先前创建的自定义程序集来检索其本地化的值。 为了做到这一点
添加对程序集的引用

添加VB代码以访问暴露的用于本地化的类方法

要本地化标题,请右键单击文本框并选择“表达式...”。使用自定义代码获取任何string
的本地化值。参考库中创建的“resx”文件以获取要传递的参数名称。
=Code.LocalizedValue("REPORTHEADER", Parameters!ReportCulture.Value)
使用自定义代码本地化标题后,设计器将如下所示

还有一些其他的事情需要牢记
- 使用强名称签署程序集,以便我们可以将资源程序集保存在服务器的GAC中。
- 自定义程序集需要放置在以下两个位置
- Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies
- Program Files\Microsoft SQL Server\MSSQL.3\Reporting
- 将资源文件放在报表服务器的GAC中
完成了!SSRS报表现在已本地化。
兴趣点
在经历SSRS本地化过程中,Microsoft文章KB920769提供了很大帮助。(参考这里.)
历史
- 初始版本 - 2009年2月8日