Многоязычный в SSRS

Существует ли способ отобразить/экспортировать английский отчет о SSRS на некоторых других языках?

9
задан sanjeev40084 17 February 2010 в 17:27
поделиться

3 ответа

Нет, к сожалению, нет простого способа сделать это :-( Я сам пытался это запустить, но в конце концов, что Я просто передал все метки, которые я хочу отображать в отчете из вызывающего приложения (в моем случае приложение ASP.NET).

Другой подход может заключаться в хранении фрагментов текста в таблице SQL Server, и добавьте в отчет источник данных, который извлекает эти текстовые метки, а затем привязывает их к соответствующим элементам управления. Я пробовал что-то подобное, но не смог заставить его работать для себя.

Это боль, что ASP.NET настолько хорошо интернационализирован с ресурсами, но SSRS по-прежнему довольно запутан, когда пытается сделать его многоязычным: - (

6
ответ дан 4 December 2019 в 11:41
поделиться

Мне удалось получить многоязыковую поддержку через .NET Resource files, применив интересный хак. Для каждого элемента управления отчетом существует неиспользуемое свойство ValueLocId. Используя это свойство, вы можете указать имя ресурса, которое будет использоваться для каждого элемента управления. Идея заключается в том, что вы будете просматривать определение отчета, ища элементы управления, у которых установлено свойство ValueLocID. Если свойство установлено, замените Text этого элемента управления на Resource Text, указанный в ValueLocID. В общем, идея такова:

  1. Загрузите файл RDLC в память, как XML-файл
  2. Перейдите по XML-файлу с помощью XPath, ища свойства ValueLocID
  3. Замените innerText этого XML-узла на Resource, указанный в ValueLocID
  4. Загрузите элемент управления ReportViewer, используя копию файла RDLC в памяти.

Смотрите функцию ниже, которая сделает именно то, о чем я говорил выше.

Private Sub LocalizeReport()

    Dim xmlDoc As XmlDocument = New XmlDocument
    Dim asm As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
    'create in memory, a XML file from a embedded resource
    Dim xmlStream As Stream = asm.GetManifestResourceStream(ReportViewer1.LocalReport.ReportEmbeddedResource)

    Try
        'Load the RDLC file into a XML doc
        xmlDoc.Load(xmlStream)
    Catch e As Exception
        'HANDLE YOUR ERROR HERE
    End Try

    'Create an XmlNamespaceManager to resolve the default namespace
    Dim nsmgr As XmlNamespaceManager = New XmlNamespaceManager(xmlDoc.NameTable)
    nsmgr.AddNamespace("nm", "http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition")
    nsmgr.AddNamespace("rd", "http://schemas.microsoft.com/SQLServer/reporting/reportdesigner")

    'IMPORTANT LINE BELOW
    'YOU WILL NEED TO SET THIS TO YOUR RESOURCE MANAGER, OTHERWISE NOTHING WILL WORK
    Dim rm As ResourceManager = New ResourceManager("Insurance.Subs.WinUI.Controls.Resources", asm)

    'Loop through each node in the XML file, that has the ValueLOCId property set.
    'Using this property as a workaround for localization support.  The value specified in this
    'property will determine what resource to use for translation.
    Dim node As XmlNode
    For Each node In xmlDoc.DocumentElement.SelectNodes(String.Format("//nm:{0}[@rd:LocID]", "Value"), nsmgr)  'XPath to LocID
        Dim nodeValue As String = node.InnerText
        If (String.IsNullOrEmpty(nodeValue) Or Not nodeValue.StartsWith("=")) Then
            Try
                Dim localizedValue As String = node.Attributes("rd:LocID").Value

                'Get the resource via string
                localizedValue = rm.GetString(localizedValue)
                If Not String.IsNullOrEmpty(localizedValue) Then
                    'Set the text value - via the retrieved information from resource file
                    node.InnerText = localizedValue
                End If

            Catch ex As Exception
                'handle error
            End Try
        End If
    Next

    ReportViewer1.LocalReport.ReportPath = String.Empty
    ReportViewer1.LocalReport.ReportEmbeddedResource = Nothing
    'Load the updated RDLC document into LocalReport object.
    Dim rdlcOutputStream As StringReader = New StringReader(xmlDoc.DocumentElement.OuterXml)
    Using rdlcOutputStream
        ReportViewer1.LocalReport.LoadReportDefinition(rdlcOutputStream)
    End Using

End Sub
5
ответ дан 4 December 2019 в 11:41
поделиться

Вы можете выставить глобальный параметр (User!Language), который отражает язык пользователя.

Затем вы можете использовать google translateapi для преобразования английских слов в ваш язык.

Вот отличная статья: http://mscrm4u.blogspot.com/2008/06/multi-lingual-ssrs-reports.html

3
ответ дан 4 December 2019 в 11:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: