¿Hay alguna manera de mostrar/exportar el informe SSRS en inglés en algunos otros idiomas?Multilenguaje en SSRS
Respuesta
No, desafortunadamente, no hay una manera fácil de hacer esto :-(He estado tratando de hacer funcionar esto, pero al final lo que hice fue básicamente pasar todas las etiquetas que quiero que se muestren en el informe de la aplicación de llamada (una aplicación ASP.NET, en mi caso).
Otro enfoque podría ser almacenar los fragmentos de texto en una tabla de SQL Server y agregar una fuente de datos a su informe que recupera esas etiquetas de texto, y luego atarlas a los controles apropiados. probé algo por el estilo, pero no han sido capaces de hacer que funcione para mí.
es un dolor que ASP.NET está tan bien internacionalizó con recursos, pero sigue siendo bastante SSRS un sucio justo al tratar de que sea multi-idioma consciente :-(
Puede exponer un parámetro global (User! Language) que refleja la lengua del usuario.
Luego puede usar google translateapi para convertir palabras en inglés a su idioma.
Aquí es un excelente artículo: http://mscrm4u.blogspot.com/2008/06/multi-lingual-ssrs-reports.html
logré soporte multilenguaje, a través de archivos de recursos .NET, mediante la aplicación de un truco interesante. Hay una propiedad no utilizada para cada control de informe, llamada ValueLocId. Usando esta propiedad, puede especificar el nombre del recurso para usar para cada control. La idea aquí es que recorra su definición de informe, buscando controles que tengan la propiedad ValueLocID establecida. Si la propiedad está configurada, reemplace el texto de ese control con el texto del recurso especificado en el ValueLocID. Así que, básicamente, la idea es la siguiente:
- carga el archivo RDLC en la memoria, como un archivo XML
- Traverse el archivo XML usando XPath, en busca de propiedades ValueLocID
- Sustituir el innerText de ese nodo XML con Recurso especificado en ValueLocID
- Cargue el control ReportViewer utilizando la copia de la memoria del archivo RDLC.
Consulte la siguiente función, que hará exactamente lo que mencioné anteriormente.
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
no funciona para archivos .RDL basados en servidor, sin embargo (y eso es con lo que estoy trabajando) –
Sí, eso es correcto. Esta solución solo funcionará con informes alojados localmente. – jgallant
Debe intentar el siguiente enlace, esta parece ser la mejor manera de hacerlo.
http://support.microsoft.com/kb/920769
Usted tendrá que crear un conjunto con sus recursos y métodos para obtener cuerdas en base a la cultura. Usted puede encontrar el tutorial completo aquí:
http://www.codeproject.com/Articles/294636/Localizing-SQL-Server-Reporting-Services-Reports
Puede agregar un ensamblado personalizado que contiene los recursos para sus cadenas quiere traducir, y acceder a ellos en su informe.
Estoy de acuerdo con Igoy en esto después de haber ejecutado recientemente los pasos enumerados en el proyecto de código, pero me gustaría añadir que los pasos a seguir cuando agregue el nuevo CodeGroup carecen un poco en que si coloca el nuevo CodeGroup en cualquier lugar pero después del UnioncodeGroup sin nombre (es el que tiene Url = "$ CodeGen $/*") fallarán sus intentos de acceder a su ensamblado personalizado.
Después de buscar mucho, pude encontrar la confirmación de esto en una de las páginas msdn (consulte la sección "Ubicación de los elementos del grupo de códigos para las extensiones"). Su redacción fue que "se recomienda", pero desde mi prueba me diría que es necesario, al menos cuando se prueba directamente en el servidor de informes: http://msdn.microsoft.com/en-us/library/ms152828.aspx
El XPath para esta ubicación en los archivos .config es, como tal, (útil en wix): // PolicyLevel/CodeGroup/CodeGroup [[] @ class = [] 'FirstMatchCodeGroup']/CodeGroup [[] @ PermissionSetName = 'ReportLocalization' []]
No veo cómo mi respuesta es "no útil". Siguiendo varios de los ejemplos de la comunidad sobre cómo localizar SSRS, tuve que pasar tres días extra para encontrar la información útil que he compartido aquí. ¿Podrían los votantes abajo explicar por favor? Podrías ayudarme a ser un mejor colaborador de SO :) – idclaar
Going la dsTranslations SQL manera el conjunto de datos (No me gusta meterme en el XML)
Esto le permite hacer una interfaz simple para que sus clientes completen las traducciones, por ejemplo, una rápida Lightswitch GUI
El uso de este conjunto de datos i hacer una búsqueda sencillo traducir
=Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation")
Este segundo método es el i personaly uso, en caso de que la clave no es en dbTranslations, muestra la clave wat que deben agregar al db. Probablemente podría hacer esta segunda parte de forma más elegante, los comentarios son bienvenidos.
=Microsoft.VisualBasic.Interaction.iif(Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation") = "", "WORDTOBETRANSLATED", Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation"))
La manera más sencilla de hacer un informe de ssrs multilingüe es utilizar un código fijo o usar el conjunto de datos compartido. sin embargo, nos enfrentaremos al problema de rendimiento de representación si utilizamos el conjunto de datos compartido.
Éstos son un enfoque eficiente para traducir las etiquetas en el informe con un mejor rendimiento (especialmente en el Rendimiento de la representación)
Paso 1: Poner en práctica una biblioteca para apoyar conseguir Inglés para informes, el siguiente ejemplo es para referencia, esto debería ser modificado para volver diccionario correcta
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Security.Permissions;
using System.Text;
using System.Data.SqlClient;
namespace CmsReportLibrary
{
public class DictionaryLabel
{
DictionaryLabel()
{
}
public static string[] GetDictionary(int languageid)
{
System.Data.SqlClient.SqlClientPermission oPerm = new System.Data.SqlClient.SqlClientPermission(PermissionState.Unrestricted);
oPerm.Assert();
SqlConnection oConn = new SqlConnection();
oConn.ConnectionString = ConfigurationManager.ConnectionStrings["appconnectionstring"].ConnectionString;
//oConn.ConnectionString = "Data Source=(local);Initial Catalog=Northwind;User Id=<>;Password=<>";
//oConn.Open();
//SqlCommand oCmd = new SqlCommand();
//oCmd.Connection = oConn;
//oCmd.CommandText = "..................";
// ....................
//oConn.Close(); \t
return new string[] {...............};
\t \t \t //ex return new string[] { "Client||Klient", "Week||Woche", "Year||Jahr"}; \t \t \t
}
}
}
Paso 2: Compilar la biblioteca y copiarlo a la carpeta Bin de servidor de informes del Servicio de informe
Por ejemplo: copiar la biblioteca en C: \ Server \ MSRS10_50.R2 \ Servicios de Información Archivos de programa \ Microsoft SQL \ ReportServer \ bin
Paso 3: Modificar archivo rssrvpolicy.config en ReportServer carpeta (por ejemplo: C: \ Archivos de programa \ Microsoft SQL Server \ MSRS10_50.R2 \ Reporting Services \ rssrvpolicy.config), encontrar el "$ CodeGen $" y añada el siguiente código para permitir que los SSRS conocen la ubicación de la nueva biblioteca
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="CoDeMagSample"
Description="CoDe Magazine Sample. ">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS10_50.R2\Reporting Services\ReportServer\bin\CmsReportLibrary.dll"
/>
</CodeGroup>
Paso 4: Stop and Start Reporting Service En Administrador de configuración del servicio de informes
Paso 5: Aplicar la biblioteca en el Informe SSRS Crear un nuevo informe o modificar un nuevo informe, este informe debe tener un parámetro de idioma Establecer las referencias a la biblioteca para este informe por clic derecho en el informe, seleccione Propiedades del informe Haga clic en la pestaña Referencias Pegar las referencias de biblioteca en "Añadir o quitar asambleas" zona:
CmsReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Paso 6: Añadir un código personalizado para apoyar la traducción de etiquetas
public Shared Dim ListLabel as String()
función GetListLabel (LanguageID como entero) ListLabel = CmsReportLibrary.DictionaryLabel.GetDictionary (!) Parámetros LanguageId.Value final Función Traducir (entrada como secuencia) como cadena
dim i as Integer
For i=0 to UBound(ListLabel,1)
if Instr(ListLabel(i), input) > 0 then
Translate = Replace(ListLabel(i), input + "||","")
exit function
end if
Next
'Not found, return any string you want
Translate = "not found"
end function
Paso 7: Añadir nueva variable de informe
expresión para la ListLabel variables
=Code.GetListLabel(Parameters!LanguageId.Value)
Paso 8: Traducir las etiquetas en el informe
modificar la expresión de etiqueta, utilice el método Traducir en código personalizado para traducir
Por ejemplo:
=Code.Translate("Client")
=Code.Translate("Week")
- 1. Multilenguaje en WPF
- 2. Documentación multilenguaje POD
- 3. asp.net mvc URLs multilenguaje/enrutamiento
- 4. Cómo crear una etiqueta multilenguaje en Yii
- 5. Soluciones multilenguaje Visual Studio 2010 Express
- 6. ¿Cambia el idioma dinámicamente con androids multilenguaje?
- 7. Eliminar caracteres no imprimibles C# multilenguaje
- 8. Acción condicional en SSRS
- 9. Internacionalización en SSRS
- 10. XSLT en SSRS informe
- 11. Nuevo en la configuración SSRS
- 12. ¿Cómo hacer una aplicación de consola C# multilenguaje?
- 13. ¿es posible crear un instalador multilenguaje usando WIX?
- 14. Misterio de rendimiento SSRS
- 15. Extremos SSRS alternativos
- 16. SSRS 2012 Report Models
- 17. Telerik ¿Informes sobre SSRS?
- 18. SSRS Reports Versioning
- 19. Suma condicional de SSRS
- 20. SSRS indicador de tamaño
- 21. Agrupar varios informes en uno en SSRS
- 22. Mostrar tabla en varias columnas en SSRS
- 23. número de formato en el informe ssrs
- 24. Informe de SSRS cabido en PDF
- 25. una columna de expresiones en SSRS
- 26. Cómo automatizar pruebas para informes en SSRS
- 27. Comentarios en Expresiones de informes de SSRS
- 28. Visualización de página única en HTML: SSRS
- 29. ¿Visualizar informes de SSRS en SharePoint?
- 30. Agregación de cadenas en SSRS 2005
realmente no está seguro de si quiero llamar a un servicio de Google automatizado para todos y cada etiqueta única en mi informe ..... –
@marc_s no es necesario, ese es un ejemplo. Si aprovecha nvarchar y una herramienta, también puede recuperar información de columna para los títulos en cualquier idioma. – JonH