Есть ли способ отображения/экспорта английского отчета SSRS на некоторых других языках?Многоязычный в SSRS
ответ
Нет, к сожалению, нет простого способа сделать это :-(Я пытался это сделать и работать сам, но в конце концов, что я сделал, в основном передал все ярлыки, которые я хочу отобразить на отчет от вызывающего приложения (приложение ASP.NET в моем случае).
Другим подходом может быть сохранение текстовых фрагментов в таблице SQL Server и добавление источника данных в ваш отчет, который извлекает эти текстовые метки, а затем привязать их к соответствующим элементам управления. Я пробовал что-то вроде этого, но не смог заставить его работать для себя.
Очень больно, что ASP.NET настолько интернационализирован ресурсами, но SSRS по-прежнему довольно грязный аф справедливо, когда вы пытаетесь сделать это на нескольких языках :-(
Вы можете открыть глобальный параметр (Пользователь! Язык), который отражает пользовательский язык.
Затем вы можете использовать google translateapi для преобразования слов на английском языке на ваш язык.
Вот отличная статья: http://mscrm4u.blogspot.com/2008/06/multi-lingual-ssrs-reports.html
мне удалось получить многоязычную поддержку, с помощью файлов ресурсов .NET, применяя интересный хак. Существует неиспользуемое свойство для каждого отдельного элемента управления отчетами, называемого ValueLocId. Используя это свойство, вы можете указать имя ресурса для каждого элемента управления. Идея здесь в том, что вы будете перебирать определение своего отчета, ища элементы управления, которые имеют свойство ValueLocID. Если свойство установлено, замените текст этого элемента текстом ресурсов, указанным в ValueLocID. Таким образом, в принципе, идея заключается в следующем:
- Загрузите файл RDLC в памяти, как файл XML
- Траверс файла XML с помощью XPath, ищет свойства ValueLocID
- Заменить InnerText этого XML-узла с ресурс, указанный в ValueLocID
- Загрузите элемент управления 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
не работает только для серверных файлов .RDL (и это то, с чем я работаю) –
Да, это правильно. Это решение будет работать только с локально размещенными отчетами. – jgallant
Вы должны попробовать следующую ссылку, это, пожалуй, лучший способ это сделать.
http://support.microsoft.com/kb/920769
Вам нужно будет создать сборку с вашими ресурсами и методы, чтобы получить строки, основанные на культуре. Вы можете найти полный учебник здесь:
http://www.codeproject.com/Articles/294636/Localizing-SQL-Server-Reporting-Services-Reports
Вы можете добавить пользовательскую сборку, которая содержит ресурсы для ваших строк, которые вы хотите перевести, и доступ к ним в отчете.
Я согласен с Igoy в этом, недавно пропустив шаги, перечисленные в кодепроекте, но хотел бы добавить, что шаги, которые необходимо предпринять при добавлении новой CodeGroup, немного отстают в том, что если вы поместите новую CodeGroup в любом месте но после неназванной UnioncodeGroup (это тот, у кого есть Url = "$ CodeGen $/*") ваши попытки получить доступ к вашей пользовательской сборке не удастся.
После многократного поиска я смог найти подтверждение этого на одной из страниц msdn (см. Раздел «Размещение элементов групповой политики для расширений»). Их формулировка, что «рекомендуется», но из моего тестирования я бы сказал, что это необходимо, по крайней мере, при тестировании непосредственно на сервере отчетов: http://msdn.microsoft.com/en-us/library/ms152828.aspx
для этого XPath места в .config файлов как таковые (полезно в WiX): // PolicyLevel/CodeGroup/CodeGroup [[] @ класс = [] 'FirstMatchCodeGroup']/CodeGroup [[] @ PermissionSetName = 'ReportLocalization' []]
Я не вижу, как мой ответ «не полезен». Следуя нескольким примерам сообщества о том, как локализовать SSRS, мне пришлось потратить дополнительные три дня на выяснение полезной информации, которую я здесь поделил. Пожалуйста, объясните, пожалуйста, избирателей. Вы могли бы помочь мне стать лучшим спонсором SO :) – idclaar
идущее SQL dsTranslations набор данных путь (мне не нравится в XML)
Это позволяет сделать простой интерфейс, чтобы ваши клиенты заполнили переводы, , например, быстрый Lightswitch GUI
Используя этот набор данных я сделать простой поиск, чтобы перевести
=Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation")
Этот второй метод является один я Personaly использование, в случае, если ключ не в dbTranslations он показывает ват-ключ, который они должны добавить в db. Я мог бы, вероятно, сделать эту вторую часть более элегантно, обратная связь приветствуется.
=Microsoft.VisualBasic.Interaction.iif(Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation") = "", "WORDTOBETRANSLATED", Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation"))
Простой способ сделать многоязычный отчет ssrs является жестким кодом или использованием sharedataset. однако мы столкнемся с проблемой производительности рендеринга, если мы используем набор данных share.
Вот эффективный подход для перевода этикеток в отчете с более высокой производительностью (особенно на оказание производительности)
Шаг 1: Реализация библиотеки для поддержки получения словаря для отчетов, ниже пример для справки, это должно быть изменен, чтобы вернуть правильный словарю
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
}
}
}
Шаг 2: Компиляция библиотеки и скопируйте его в папку Bin в ReportServer в Reporting Service
Например: скопировать библиотеку C: \ \ MSRS10_50.R2 служб Reporting Services \ Program Files \ Microsoft SQL Server \ ReportServer \ бин
Шаг 3: Изменение файла rssrvpolicy.config файл в ReportServer (например: C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.R2 \ Службы Reporting Services \ rssrvpolicy.конфигурации), найти «$ Codegen $» и добавьте следующий код, чтобы позволить SSRS знать местоположение новой библиотеки
<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>
Шаг 4: остановка и запуск Служба отчетов В Диспетчер конфигурации служб отчетов
Шаг 5: Применить библиотеку в отчет SSRS Создать новый отчет или изменить новый отчет, этот отчет должен иметь параметр languageid Set ссылки на библиотеку для этого отчета правой кнопкой мыши на отчете, выберите Свойства отчета Нажмите на вкладке Ссылки Вставить ссылки из библиотеки в «Добавление или удаление узлов» области:
CmsReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Step 6: Добавьте пользовательский код для поддержки перевода знака
public Shared Dim ListLabel as String()
функция GetListLabel (LanguageID, как Integer) ListLabel = CmsReportLibrary.DictionaryLabel.GetDictionary (! Параметры LanguageId.Value) конец функции функция Перевести (вход в виде строки) в качестве строки
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
Шаг 7: Добавление новой переменной отчет
Выражение для ListLabel переменная
=Code.GetListLabel(Parameters!LanguageId.Value)
Шаг 8: Перевести этикетки в докладе
Измените выражение метки, используйте метод Перевести в Таможенный кодекс, чтобы перевести
Например:
=Code.Translate("Client")
=Code.Translate("Week")
- 1. Многоязычный и многоязычный сайт Django-CMS
- 2. Многоязычный coreNLP
- 3. Многоязычный перевод
- 4. Многоязычный сайт в ASP.NET
- 5. Многоязычный сайт в ASP.NET
- 6. Преобразование системы в многоязычный
- 7. Многоязычный контент в Кордове
- 8. Многоязычный в Метеор
- 9. Многоязычный SQLite в Android
- 10. Многоязычный в WPF
- 11. Многоязычный сайт в .net
- 12. Многоязычный словарь в C#?
- 13. Многоязычный язык в FuelCMS
- 14. Многоязычный документ в латексе
- 15. Многоязычный сайт в Codeigniter
- 16. Многоязычный в Codeigniter
- 17. Многоязычный контент в CKAN
- 18. Многоязычный CMS?
- 19. Offline.js - Многоязычный
- 20. Многоязычный сайт
- 21. Многоязычный ePub
- 22. Yii2 - Многоязычный
- 23. Создать многоязычный язык в Joomla?
- 24. Конвертировать веб-сайт в многоязычный?
- 25. Многоязычный текст в библиотеки речи?
- 26. Многоязычный рендеринг Unicode в opengl
- 27. Многоязычный авто-побег в Freemarker
- 28. Как перенаправить в .htaccess? (многоязычный)
- 29. Многоязычный веб-сайт в mvc4
- 30. Многоязычный сканер ввода в java?
действительно не уверен, если я хочу, чтобы вызвать к автоматизированной службы Google для каждого и каждой метки на мой отчет ..... –
@marc_s вам не обязательно, это пример. Если вы используете nvarchar и sproc, вы можете получить информацию о столбцах для заголовков на любом языке. – JonH