This add-in permits you to define strings into a
ResourceDictionary of your project and use them in code just like you could do with RESX files. In this way, during localization process, you don't have to merge satellite DLLs.
The Custom Task for MSBuild
The core of the utility is StringsResourceGeneratorTask, a custom task that runs the BeforeBuild step of MSBuild. You can use the task without the StringsResourceGenerator add-in, installing the DLL in the GAC and editing your project file manually. At the bottom of the project file, as children of the Project node, you have to add:
For information on the
Target tags, see the "References" section. The
StringsResourceGeneratorTask tag defines the custom tag, and its attributes, the properties. The
Namespace attribute specifies the namespace of the class that will be created. The
AssemblyName attribute defines the assembly of your project.
ClassName is the name of the class that will be generated.
StringsResourceFileName is the relative path of the files XAML and CS (for example, if the files are called LocalizableStrings.xaml and LocalizableStrings.xaml.cs under "Folder1", the value of
StringsResourceFileName will be "Folder1/LocalizableStrings", extension is not necessary).
Reload the project. A dialog will appear:
Choose "Load project normally".
The task can generate code for C# only, but it's easy to expand it for other languages. You have to inherit from the
TypeCodeController class and override the
StringsCodeTemplate property and the
GeneratePropertyCode function. The
CSController class, used to generate the C# code, is an example.
In the project, you have to insert a .xaml file and a .cs file. The .cs file must be in the same path as the XAML file and have the same name, with the extension .xaml.cs.
The simpler way to obtain it is to insert a WPF UserControl. In the XAML, replace all with an empty
ResourceDictionary with a reference to the MsCorlib library and a prefix "
system" for the namespace. The prefix
system is very important because it will be used by the custom task:
In the C# file, remove all. If you want to add a string, go to the XAML file and add:
And, compile the project (see "Known Bugs"). Now, if you want to show a
MessageBox, you can write:
In Documentation.zip, there is a doc file "How to use StringsResourceGeneratorTask" that explains the settings of the task in a detailed way.
Here is the scheme for the task:
This add-in adds an item in the Tools main menu with the name "StringsResourceGenerator...". You must select an item or a folder in the project in which you want to add the XAML and cs files for managing the strings from code. Then, you click the add-in item. A dialog appears:
StringsResourceFileName represents the files name for the
ResourceDictionary and code. For example, if you choose
LocalizableStrings, two files will be added in the project: LocalizableStrings.xaml and LocalizableStrings.xaml.cs.
Namespace is the namespace in which the class will be added. AssemblyName is the name of the assembly generated by the compile process. ClassName represents the name of the class that will be generated. Once you have generated the files, you can modify (or delete) the file name or class name, but manually, you have to edit the project file and change the attributes related to StringsResourceGeneratorTask. The add-in uses a template for adding the files to the project. The template, during installation, will go under Visual Studio 2008 C# item templates. There isn't a template for VB.
Visual Studio 2008 is the environment fully supported. If you use Visual Studio 2005, you can use the custom task only and set it manually (see "The Custom Task for MSBuild").
Support for VB projects.
After adding the XAML and cs files with the Add-in menu item, the first compilation doesn't work. After the second one, all works correctly. If your project doesn't have
PresentationFramework as references, you have to add them manually. If you select the project root, the add-in doesn't work! You have to select an item or a folder. If you modify or delete resource files previously created, the project file isn't updated automatically.
For the Custom Task:
For the Add-in Deploy: