New to Telerik UI for WPF? Download free 30-day trial

Localization

The built-in localization mechanism in Silverlight and WPF allows you to localize any string resource used by the standard RadScheduleView control. Once translated you might use your resources in Silverlight and WPF projects without changing anything.

RadScheduleView Localization 01

Supported Languages

RadScheduleView can be translated in one of the following supported languages using the framework’s localization mechanism:

  • English
  • German
  • Spanish
  • French
  • Italian
  • Dutch
  • Turkish

More information on how to achieve this you can find in the Localization Using Built-in Resources article.

LocalizationManager

The Telerik.Windows.Controls.LocalizationManager allows you to easily localize any of the Telerik controls.

To apply custom localization to your controls just instantiate your custom LocalizationManager and set it to the static property LocalizationManager.Manager, before the creation of the UI.

LocalizationManager.Manager = new CustomLocalizationManager(); 
LocalizationManager.Manager = New CustomLocalizationManager() 

Note that you have to set the localization manager before the creation of the UI, otherwise some parts might remain not-localized.

Resource Keys

RadScheduleView is a complex user interface control and its strings for localization are numerous. In order to be able to distinguish these resources, a unique identifier, called resource key, is assigned to each localizable string.

On the picture below you can see some of the resource keys and the strings they are associated with. A complete list of the RadScheduleView resource keys can be found here.

RadScheduleView Localization 01

Localization Using ResourceManager

You can base your localization on the standard resource files provided by the .NET framework. For that purpose you will have to create a separate .ResX file for each one of the languages that your application will support.

Imagine that you want to translate your schedule control into English, German and Dutch. For that purpose you will have to add three new resource files to your project:

  • ScheduleViewResources.resx - this resource file will store the English(default) resources for the ScheduleView control. Set the AccessModifier property to Public.

  • ScheduleViewResources.de.resx - this resource file will store the German resources for the ScheduleView control. Set the AccessModifier property to No code generation.

  • ScheduleViewResources.nl.resx - this resource file will store the Dutch resources for the ScheduleView control. Set the AccessModifier property to No code generation.

RadScheduleView Localization04

Now, having the needed files, it's time to illustrate the idea and localize for example the text for the Day, Week, Month and Timeline navigation strings. For that purpose you need to create four resource strings in each one of the three resource files and translate them to the appropriate language.

Note that the name of the resource string should be the same as the resource key for the string you are localizing i.e. the resource key for the Day is Day, for the Week is Week, for Month is Month and for the Timeline is Timeline.

The snapshot below shows the content of the ScheduleViewResources.de.resx file. The resource name of the other two files should be the same. The Value column will contain the translation for the appropriate language.

RadScheduleView Localization3

The last step is to instantiate the LocalizationManager class and set its ResourceManager to the resources that have been just created.

LocalizationManager.Manager = new LocalizationManager() 
{ 
   ResourceManager = ScheduleViewResources.ResourceManager 
}; 
LocalizationManager.Manager = New LocalizationManager() 
LocalizationManager.Manager.ResourceManager = ScheduleViewResources.ResourceManager 

Here is how the localized RadScheduleView looks like:

RadScheduleView Localization 06

Localization Using Custom Localization Manager

The other way to localize your RadScheduleView control is to create a class that derives from the ScheduleViewLocalizationManager object and to override its method GetStringOverride(). The logic is pretty simple, you just have to create a switch statement and return the correct translation for each resource key, as it is shown below:

public class CustomLocalizationManager : ScheduleViewLocalizationManager 
{ 
   public override string GetStringOverride( string key ) 
   { 
       switch( key ) 
       { 
           case "Timeline": 
               return "Zeitline"; 
           case "Day": 
               return "Tag"; 
           case "Week": 
               return "Woche"; 
           case "Month": 
               return "Monat"; 
           case "SaveAndCloseCommandText": 
               return "Speichern & Sliessen"; 
           case "EditRecurrence": 
               return "Serie bearbeithen"; 
           case "Categories": 
               return "Kategrisieren"; 
       } 
       return base.GetStringOverride( key ); 
   } 
} 
Public Class CustomLocalizationManager 
    Inherits ScheduleViewLocalizationManager 
    Public Overloads Overrides Function GetStringOverride(ByVal key As String) As String 
        Select Case key 
            Case "Timeline" 
                Return "Zeitline" 
            Case "Day" 
                Return "Tag" 
            Case "Week" 
                Return "Woche" 
            Case "Month" 
                Return "Monat" 
            Case "SaveAndCloseCommandText" 
                Return "Speichern & Sliessen" 
            Case "EditRecurrence" 
                Return "Serie bearbeithen" 
            Case "Categories" 
                Return "Kategrisieren" 
        End Select 
        Return MyBase.GetStringOverride(key) 
    End Function 
End Class 

It is important for the custom localization manager to derive from ScheduleViewLocalizationManager and not from LocalizationManager.

Of course, if you don't want to hard-code your translation inside your source code, you can always use resource files:

public override string GetStringOverride( string key ) 
{ 
   switch( key ) 
   { 
       //---------------------- 
       case "Timeline": 
           return ScheduleViewResources.Timeline; 
       //---------------------- 
   } 
   return base.GetStringOverride( key ); 
} 
Public Overloads Overrides Function GetStringOverride(ByVal key As String) As String 
    Select Case key 
        '---------------------- 
        Case "Timeline" 
            Return ScheduleViewResources.Timeline 
        '---------------------- 
    End Select 
    Return MyBase.GetStringOverride(key) 
End Function 

RadScheduleView Resource Keys

The following Resource Keys are available:

  • AllDayEvent

  • Appointment

  • AppointmentRecurrence

  • AppointmentTime

  • Body

  • Busy

  • Cancel

  • Categorize

  • CreateAppointment

  • Daily

  • Day

  • Days

  • DeleteAppointment

  • DeleteItem

  • DeleteItemQuestion

  • DeleteOccurrence

  • DeleteRecurringItem

  • DeleteRecurringItemQuestion

  • DeleteSeries

  • DurationColon

  • DurationDay

  • DurationDays

  • DurationHour

  • DurationHours

  • DurationMinute

  • DurationMinutes

  • DurationWeek

  • DurationWeeks

  • EditAppointment

  • EditParentAppointment

  • EditRecurrence

  • EditRecurrenceCommandText

  • EditRecurrenceRule

  • EndAfter

  • EndBy

  • EndColon

  • EndDateBeforeStart

  • EndTime

  • Event

  • Every

  • EveryDay

  • EveryWeekday

  • First

  • Fourth

  • Free

  • HighImportance

  • InvalidRecurrenceRuleMessage

  • InvalidRecurrenceRuleTitle

  • Last

  • LowImportance

  • Month

  • Monthly

  • Months

  • NoEndDate

  • Occurrences

  • Of

  • OfEvery

  • Ok

  • OpenOccurrence

  • OpenRecurringItem

  • OpenRecurringItemQuestion

  • OpenSeries

  • OutOfOffice

  • RangeOfRecurrence

  • RecurEvery

  • RecurrencePattern

  • RemoveRecurrence

  • SaveAndClose

  • SaveAndCloseCommandText

  • SaveAppointment

  • SaveRecurrence

  • Second

  • SetDayViewMode

  • SetMonthViewMode

  • SetTimelineViewMode

  • SetWeekViewMode

  • ShowAs

  • Start

  • StartColon

  • StartTime

  • Subject

  • Tentative

  • The

  • Third

  • Timeline

  • Untitled

  • Week

  • WeekDays

  • WeekendDays

  • Weekly

  • WeeksOn

  • Yearly

  • DragRecurringWarning

Using Built-In Resources

RadScheduleView provides you with built-in resources for several cultures: Spanish, German, Italian, Turkish, Dutch.

To change the default culture, you should set the CurrentCulture and the CurrentUICulture of the CurrentThread. Note that this must happen in the code-behind of your Application (App.xaml.cs) file, right before the UI initialization. The next code-snippet shows you how to change the CurrentCulture to Dutch.

public partial class App : Application 
{ 
   public App() 
   { 
       System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo( "nl" ); 
       System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo( "nl" ); 
       InitializeComponent(); 
   } 
} 
In this article