Существует ли способ отобразить/экспортировать английский отчет о SSRS на некоторых других языках?
Нет, к сожалению, нет простого способа сделать это :-( Я сам пытался это запустить, но в конце концов, что Я просто передал все метки, которые я хочу отображать в отчете из вызывающего приложения (в моем случае приложение ASP.NET).
Другой подход может заключаться в хранении фрагментов текста в таблице SQL Server, и добавьте в отчет источник данных, который извлекает эти текстовые метки, а затем привязывает их к соответствующим элементам управления. Я пробовал что-то подобное, но не смог заставить его работать для себя.
Это боль, что ASP.NET настолько хорошо интернационализирован с ресурсами, но SSRS по-прежнему довольно запутан, когда пытается сделать его многоязычным: - (
Мне удалось получить многоязыковую поддержку через .NET Resource files, применив интересный хак. Для каждого элемента управления отчетом существует неиспользуемое свойство ValueLocId. Используя это свойство, вы можете указать имя ресурса, которое будет использоваться для каждого элемента управления. Идея заключается в том, что вы будете просматривать определение отчета, ища элементы управления, у которых установлено свойство ValueLocID. Если свойство установлено, замените Text этого элемента управления на Resource Text, указанный в ValueLocID. В общем, идея такова:
Смотрите функцию ниже, которая сделает именно то, о чем я говорил выше.
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
Вы можете выставить глобальный параметр (User!Language), который отражает язык пользователя.
Затем вы можете использовать google translateapi для преобразования английских слов в ваш язык.
Вот отличная статья: http://mscrm4u.blogspot.com/2008/06/multi-lingual-ssrs-reports.html