Click here to Skip to main content
15,921,279 members
Articles / Desktop Programming / WPF

Easily Localize WPF Application via Visual Studio Template

Rate me:
Please Sign up or sign in to vote.
5.00/5 (3 votes)
1 May 2011CPOL2 min read 16.2K   3   1
A Localized WPF Application template for easily localizing a WPF application


Localizing a WPF application is not an easy task. Almost any article on the localization of WPF is replete with details and manual steps to implementation of a localized application.

Existing Solutions

Localization using the utility LocBaml as described by Microsoft has lots of advantages, but is difficult to maintain. André van heerwaarde in his article proposed to simplify this decision by using the configured build step. He wrote a utility to merge the translated text fragments. However, in his article, there are still many manual steps.

Visual Studio Project Template

I propose to use a Localized WPF Application template I've created to start working on a multilingual WPF application. Projects created using this template already contain all the necessary tools for localization, as well as automates the localization process.

During application development, you add a new XAML file without having to worry about localization. Upon completion of the changes, simply build the project.

  • The custom build step will call msbuild / t: updateuid [Project Name].csproj. This step will automatically add x:Uid at every element containing the text elements.
  • Then the build process will automatically start LocBaml, which finds all the text elements in the XAML file and generates a CSV file containing the text elements.
  • The next step will run the utility from MergeLocBamlCsv by André van heerwaarde. As a result, the earlier translated segments will be merged with the new ones.
  • The utility StripLocBamlCsv cuts unused items from the CSV file.

The only thing you have to do manually is to add new languages and the actual translation itself.

Adding a New Language

To add a new language in the draft, you will have to:

copy Translation\Translate.csv Translation\
<LocBamlCsv Include="Translation\">

add a new language, for example:

<LocBamlCsv Include="Translation\">
  • Copy the location of the neutral language in the new CSV file
  • Open the project file in a text editor, and after these lines:

Then you need to reopen the project in Visual Studio. If the project was already open, the IDE will ask whether you wish to reopen the project to reflect the changes, answer 'Yes'.

If you did not make mistakes, then the newly opened project folder Translation will have a new file

Start the assembly to update the translation files, then you can open a new file and start translating.

Localize Text in code-behind

StringResources.xaml is a Resource Dictionary example for translated strings:

  <!-- String resource that can be localized -->
  <system:String x:Uid="system:String_1" 
  <system:String x:Uid="system:String_2" 
  x:Key="MainWindow">Main Window</system:String>

The usage is as easy as:

this.Title = (string)FindResource("MainWindow");

Links and Credits


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Written By
Software Developer (Senior) i-BLADES
Thailand Thailand
I'm Android and Full Stack Software Engineer. 28 years in software industry, lots of finished projects. I’m never afraid of learning something new and you can see it by amount of skills in my resume.

I'm working remotely since 2009, self-motivated and self-organized.

There are no impossible projects. I have experience with Android, iOS, Web, Desktop, Embedded applications, VR, AR, XR, Computer vision, Neural networks, Games, IoT, you name it.

Comments and Discussions

GeneralOther approach Pin
time-best3-May-11 7:11
time-best3-May-11 7:11 
Thank you for you decision.
I use some other approach WPF Multi-Lingual at Runtime. It allows user add his own localization without code recompilation and use localized strings in code (I wrote some class with static method, for example
static string GetLocalizedString(String xmlNodeName)
Are you know about that approach? If you do, can you criticize one.
Thank you.

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.