我现在使用的是 SQL Server 2008 R2。
我的网站完全按原样显示报告,包括出现参数的容器(客户更喜欢这种方式)。
但是,我的网站解决方案包括本地化(葡萄牙语、英语、西班牙语)。
我尝试通过为每种语言创建一个参数来翻译参数,然后根据所选语言显示它们。它在 SSRS 2008 中不起作用。因为我不知道如何找到提示的可见性属性。
有谁知道解决方案...或者如果 SQL Server 2012 有用于翻译参数提示或条件可见性的解决方案?
谢谢。
我现在使用的是 SQL Server 2008 R2。
我的网站完全按原样显示报告,包括出现参数的容器(客户更喜欢这种方式)。
但是,我的网站解决方案包括本地化(葡萄牙语、英语、西班牙语)。
我尝试通过为每种语言创建一个参数来翻译参数,然后根据所选语言显示它们。它在 SSRS 2008 中不起作用。因为我不知道如何找到提示的可见性属性。
有谁知道解决方案...或者如果 SQL Server 2012 有用于翻译参数提示或条件可见性的解决方案?
谢谢。
到目前为止,我发现的唯一解决方案(SSRS 2008、2008R2、2010、2012)是打破 DRY 戒律,并使用语言代码复制报告作为报告名称的一部分(例如 MyReport_sp.rdl、MyReport_de.rdl 等) 然后在客户端请求和 SSRS 实例之间放置一个 Web 服务。然后,Web 服务必须根据随客户端请求传递的“文化”参数将请求发送到正确的报告。
这不是一个好的解决方案,尽管至少 Culture 参数也用于本地化报告的其余部分。我们仍然希望在将来的某个日期,MS 将添加即时本地化功能,我们可以将报告重命名为 MyReport.rdl,然后将所有内容实际本地化。嗯,什么概念……
另一种解决方法是在参数的提示中输入一个数字,然后通过使用“从查询中获取值”或在标签表达式中使用带有 switch 语句的表达式构建器为每个参数的标签添加本地化版本的前缀。
对于从查询中获取值选项,如果您在查询中有翻译版本,您将拥有类似这样的数据集:
SELECT ParamLabel, ParamValue
FROM MyLocalisedParameters
WHERE UserLanguage = @Language
或者如果不是这样:
SELECT
CASE @Language
WHEN 'pt-PT' THEN 'Selecione Departamento: ' + ParamLabel
WHEN 'es-ES' THEN 'Seleccionar Departamento: ' + ParamLabel
ELSE 'Select Department: ' + ParamLabel
END AS ParamLabel
, ParamValue
FROM MyParametersTable
在这两种情况下,创建 Globals!Language 并将其分配给名为 @Language 的参数。
或者,如果将表达式生成器用于一组硬编码的值,它看起来像这样:
无论哪种方式,最终结果都会如下所示:
不完美,但比同一份报告的多个副本更容易维护。如果您希望它看起来更整洁,那么只需将参数提示作为参数列表中的一个条目,并将其设置为默认值以避免每一行重复。
没有...
根据 connect.microsoft.com,此功能已在 SSRS 2005 发布后请求,虽然它在 Microsoft 的 TODO 列表中,但从未分配过程序员执行此操作的时间,因此在 2012 年, SSRS 仍然无法做到这一点。
尽管(费很大力气)可以翻译其他所有内容,但无法翻译参数提示。
也没有条件可见性,参数的可见性是固定的。
此外,没有办法让 SSRS 使用提供的语言而不是浏览器语言设置中设置的语言。
您唯一可以做的就是编写一个 C# 程序来加载您的 XML 文件,获取报告的参数名称(可能还有报告的名称),在数据库中查找它们,然后自动为 n 创建 N 个报告语言。
然后,您必须将您的用户重定向到他们的语言的报告。
然后您只需要编写一个上传工具,因为您不想手动执行此操作。
另一种方式是使用ReportViewer控件,并重新实现参数选择。
我认为有 CrissCross 试图做到这一点,但它在我测试的 2 份报告中都失败了。
一个邪恶的黑客将是:
parametername: babla_language1 / blabla_language2 / blabla_language3 / blabla_language4
然后使用 jQuery 获取该字符串。做 string.split('/')[index_of_language]
然后猎杀 / 永远不在“blabla_languageXY”之内
编辑:
我实际上是这样做的。您必须使用 setInterval 来执行此操作,因为在选择参数时无法检测到更改。