在 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 导出在报表服务器上不起作用

s-s-rS 2008-R2 使用 RDL 作为 portlet\widget 生成器

s-s-rS 2008 R2 - 无法登录到 localhost/reports