An easy way to do a multilingual ssrs report is to hardcode or use sharedataset. however, we will run into a rendering performance issue if we use a share dataset.
Here is an efficient approach to translating labels in a report with better performance (especially when rendering performance)
Step 1: Deploy the library to support obtaining the dictionary for reports, the example below is for reference, this must be changed to return the correct dictionary
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(); return new string[] {...............}; //ex return new string[] { "Client||Klient", "Week||Woche", "Year||Jahr"}; } } }
Step 2: Compile the library and copy it to the Bin folder in the ReportServer Reporting Service
For example: copy the library to C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.R2 \ Reporting Services \ ReportServer \ bin
Step 3: Modify the rssrvpolicy.config file in the ReportServer folder (for example: C: \ Program Files \ Microsoft SQL Server \ MSRS10_50.R2 \ Reporting Services \ rssrvpolicy.config >), find "$ CodeGen $" and add the following code to inform SSRS of the location of the new library
<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>
Step 4: Stop and start Reporting Services in Reporting Services Configuration Manager
Step 5: Apply the library to the SSRS report Create a new report or modify a new report, this report must have the languageid parameter Set library links for this report Right-click the report, select "Report Properties" Go to the "Links" tab Insert the library links in Add or remove assemblies area:
CmsReportLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Step 6: add custom code to support label wrapping
public Shared Dim ListLabel as String()
GetListLabel function (language as a whole) ListLabel = CmsReportLibrary.DictionaryLabel.GetDictionary (Parameters! LanguageId.Value) final function Translate (input as String) function as a string
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
Step 7: add a new report variable 
Expression for ListLabel Variable
=Code.GetListLabel(Parameters!LanguageId.Value)
Step 8: Translate Labels To Report
Change the label expression, use the translation method in user code to translate
For example:
=Code.Translate("Client") =Code.Translate("Week")