在 s-s-rS 2008 R2 或 2012 中是不是有本地化“参数/提示”的解决方案?
Posted
技术标签:
【中文标题】在 s-s-rS 2008 R2 或 2012 中是不是有本地化“参数/提示”的解决方案?【英文标题】:Is there a solution for localizing "parameters/prompt" in s-s-rS 2008 R2 or 2012?在 s-s-rS 2008 R2 或 2012 中是否有本地化“参数/提示”的解决方案? 【发布时间】:2013-04-17 17:09:40 【问题描述】:我现在使用的是 SQL Server 2008 R2。
我的网站完全按原样显示报告,包括出现参数的容器(客户喜欢这样)。
但是,我的网站解决方案包括本地化(葡萄牙语、英语、西班牙语)。
我尝试通过为每种语言创建一个参数来翻译参数,然后根据所选语言显示它们。它在 s-s-rS 2008 中不起作用。因为我不知道如何找到提示的可见性属性。
有谁知道解决方案...或者 SQL Server 2012 是否有用于翻译参数提示或条件可见性的解决方案?
谢谢。
【问题讨论】:
【参考方案1】:到目前为止,我发现的唯一解决方案(s-s-rS 2008、2008R2、2010、2012)是打破 DRY 戒律,并使用语言代码复制报告作为报告名称的一部分(例如 MyReport_sp.rdl、MyReport_de. rdl 等),然后在客户端请求和 s-s-rS 实例之间放置一个 Web 服务。然后,Web 服务必须根据随客户端请求传递的“文化”参数将请求发送到正确的报告。
这不是一个好的解决方案,尽管至少 Culture 参数也用于本地化报告的其余部分。我们仍然希望在未来的某个日期,MS 将添加即时本地化功能,我们可以将报告重命名为 MyReport.rdl,让所有内容都真正本地化。嗯,什么概念……
【讨论】:
【参考方案2】:另一种解决方法是在参数的提示中输入一个数字,然后通过使用“从查询中获取值”或使用表达式生成器在标签表达式。
对于从查询中获取值选项,如果您在查询中有翻译版本,您将拥有类似这样的数据集:
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 的参数。
或者,如果将表达式构建器用于一组硬编码的值,它看起来像这样:
无论哪种方式,最终结果都会如下所示:
并不完美,但比同一份报告的多个副本更易于维护。 如果您希望它看起来更整洁,那么只需将参数提示作为参数列表中的一个条目,并将其设置为默认值以避免每一行重复。
【讨论】:
【参考方案3】:没有... 根据 connect.microsoft.com,此功能是在 s-s-rS 2005 发布后请求的,虽然它在 Microsoft 的 TODO 列表中,但从未分配过程序员执行此操作的时间,因此在 2012 年,s-s-rS 仍然没有能力这样做。
虽然(费很大力气)可以翻译其他所有内容,但无法翻译参数提示。
也没有条件可见性,参数的可见性是固定的。
此外,s-s-rS 无法使用提供的语言代替浏览器语言设置中设置的语言。
您唯一能做的就是编写一个 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 来执行此操作,因为选择参数时无法检测到更改。
【讨论】:
以上是关于在 s-s-rS 2008 R2 或 2012 中是不是有本地化“参数/提示”的解决方案?的主要内容,如果未能解决你的问题,请参考以下文章
s-s-rS 2008 R2 - s-s-rS 2012 - ReportViewer:在 Safari/Chrome 中报告,但在 Firefox/Internet Explorer 8 中运行良好
是否可以在 Visual Studio 2010 中调用 s-s-rS 2008 R2 报告?
s-s-rS 2008r2 在报表管理器的主显示页面中截断报表描述
s-s-rS 2008 R2 excel 导出在报表服务器上不起作用