是否有顯示在其他一些語言/出口英文SSRS報告的方法嗎?多種語言在SSRS
回答
不,不幸的是,有沒有簡單的方法來做到這一點:-(我一直試圖讓這個啓動和運行自己,但到底是什麼我所做的是基本上通過所有我希望顯示在標籤上來自調用應用程序的報告(在我的情況下爲ASP.NET應用程序)
另一種方法可能是將文本片段存儲在SQL Server表中,並將數據源添加到報告中,以檢索這些文本標籤,然後將它們綁定到適當的控件上,我嘗試了類似的方式,但一直未能使它爲我自己工作
ASP.NET的資源很好地國際化,但SSRS仍然很一個凌亂的AF公平試圖使其支持多語言:-(
可以公開全局參數(用戶!語言)反映了用戶的郎當。
然後你可以用谷歌translateapi英語單詞轉換成你的語言。
這裏是一個很好的文章:http://mscrm4u.blogspot.com/2008/06/multi-lingual-ssrs-reports.html
我設法多語言支持,通過.NET資源文件,通過將一個有趣的黑客攻擊。每個報告控件都有一個未使用的屬性,稱爲ValueLocId。使用此屬性,您可以指定要用於每個控件的資源名稱。這裏的想法是,你將遍歷你的報表定義,尋找具有ValueLocID屬性的控件。如果該屬性已設置,請使用ValueLocID中指定的資源文本替換該控件的文本。所以基本上,這個想法是這樣的:
- 加載在內存中的RDLC文件,如使用XPath XML文件
- 遍歷XML文件,尋找ValueLocID性質
- 替換與XML節點的innerText在ValueLocID
- 裝載指定使用RDLC文件的存儲器複製ReportViewer控件資源。
見以下的功能,這將做什麼我上面提到的。
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
您可以添加其中包含的資源要翻譯的字符串的自定義組件,並在報告中對其進行訪問。
我最近在運行完codeproject中列出的步驟之後,同意Igoy的看法,但是想補充一點,如果您將新的CodeGroup放置在任何位置,添加新CodeGroup時遵循的步驟都會有所欠缺但在未命名的UnioncodeGroup(它是Url =「$ CodeGen $/*」的那個)之後,您嘗試訪問您的自定義程序集將失敗。
經過大量的挖掘,我能夠在其中一個msdn頁面上找到對此的確認(請參閱「用於擴展的CodeGroup元素的放置」一節)。其措辭是,「建議」,但是從我的測試中,我會說這是必需的,至少當直接在報表服務器上進行測試: http://msdn.microsoft.com/en-us/library/ms152828.aspx
在.config文件中這個位置的XPath是這樣(在威克斯有用): // PolicyLevel /代碼組/代碼組[[] @類= 'FirstMatchCodeGroup'[]] /代碼組[[] @ PermissionSetName = 'ReportLocalization'[]]
我不明白我的答案是「沒用」。在介紹如何使SSRS本地化的幾個社區示例之後,我不得不花費額外三天的時間來查找我在此分享的有用信息。可以倒下選民請解釋一下?你可能會幫助我成爲一個更好的SO貢獻者:) – idclaar
去的SQL dsTranslations數據集方式(我不喜歡在XML中弄亂)
這可以讓你做一個簡單的界面,讓你的客戶填寫翻譯, 例如,一個快速的LightSwitch GUI
使用該數據集I做一個簡單的查找翻譯
=Lookup("WORDTOBETRANSLATED", Fields!Key.Value, Fields!Value.Value, "dsTranslation")
該第二方法是一個我本人來說使用,以防關鍵是不要在dbTranslations中,它顯示了他們必須添加到數據庫的密鑰。 我可能會更優雅地做第二部分,反饋非常歡迎。
=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。然而,如果我們使用共享數據集,我們將面臨渲染性能問題。
下面是在報告的標籤具有更好的性能翻譯(尤其是在渲染性能)
第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步:編譯庫,並將其複製到的ReportServer Bin文件夾的報告服務
例如:庫複製到C:\ Program Files文件\ Microsoft SQL Server的\ MSRS10_50.R2 \ Reporting Services的\的ReportServer \ BIN
第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:停止和啓動Reporting服務報告服務配置管理器
步驟5:將庫應用到SSRS報告 創建新報告或修改新報告,此報告應具有語言ID參數 設置爲這個報告 庫引用右鍵單擊報告,選擇報表屬性 點擊引用選項卡 圖書館的文獻粘貼到「添加或刪除組件」區域:
CmsReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
步驟6:添加自定義代碼來支持標籤翻譯
public Shared Dim ListLabel as String()
功能GetListLabel(languageid爲整數) 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
表達的ListLabel可變
=Code.GetListLabel(Parameters!LanguageId.Value)
第8步:在報告
翻譯標籤修改標籤的表達,用翻譯法自定義代碼翻譯
例如:
=Code.Translate("Client")
=Code.Translate("Week")
- 1. 多種文化語言的SSRS報告
- 2. 如何在Android中使用多種語言,如多種語言
- 3. Joomla多種語言
- 4. 多種語言+ Htaccess
- 5. Yii2多種語言
- 6. 多種語言的多種字體
- 7. 多種語言的帖子?
- 8. CruiseControl.net有多種語言?
- 9. sitemap seo多種語言
- 10. Twitter4j - 多種語言的FilterQuery
- 11. 多種語言設置codeigniter
- 12. 流星:多種語言?
- 13. preg_match_all和多種語言
- 14. 翻譯爲多種語言
- 15. 多種語言的PHP preg_match
- 16. tcpdf中的多種語言
- 17. yii2基本多種語言
- 18. 多種語言的Jekyll
- 19. 多種語言的網站
- 20. 多種語言數據
- 21. 支持多種語言
- 22. 多種語言的網址
- 23. cakePhp和多種語言
- 24. iphone uiaccessiblity多種語言
- 25. 多種語言模型
- 26. SOLR索引每種語言/多種語言的SQL數據
- 27. SSRS報告語言
- 28. 以多種語言發言到文本
- 29. Django-CMS中多種語言的方言
- 30. 在Inno Setup中選擇多種語言
真的不知道如果我想調出的自動化谷歌的服務,爲每對每一個標籤我的報告..... –
@marc_s你不必,這是一個例子。如果您利用nvarchar和一個存儲過程,您還可以檢索任何語言的標題的列信息。 – JonH