.NET Globalization & Satellite DLL's
I'm working on localizing an app I've written in C#.
Everything seems to be working nicely, using satellite resource assemblies to translate each form's strings (as per this tutorial: http:开发者_开发技巧//msdn.microsoft.com/en-us/library/y99d1cd3%28VS.71%29.aspx)
However, the application will ultimately require quite a number of languages, which means loads of directories in my working directory (i.e. /zh-tw, /zh-cn, /fr-FR, /ja-JP, etc). I'd like to clean this up a bit by locating all of them within a /languages or /resources subdirectory (in other words, set the "base path for satellite assemblies"). But I've searched high and low, and been unable to find any way to customize the location of these satellite assemblies.
Any tips would be greatly appreciated!
Found an even easier solution - in app.config:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath=".;Lang" />
</assemblyBinding>
</runtime>
</configuration>
Then you can just toss all those dirs in the "Lang" subdir and it'll work right out of the box! A post-build event is also handy to auto-copy them in there after compilation :)
Using Resources in Your Application Part I - Simple Embedding.
IMHO, I wouldn't change anything here. There is a standard mechanism for localization in .NET, which is based on satellite dlls and these subdirectories. If you use a tool for localization, eg. Passolo, it will also support exactly this structure and nothing else.
There will be a lot of subdirectories ... so what? Everything else will be quite complicated.
Add all your resource files (i.e. *.resx) to /Resource folder and create the object of ResourceManager as below
System.Resources.ResourceManager rm = new System.Resources.ResourceManager("ApplicationName.Resources.MyResource", Assembly.GetExecutingAssembly());
Here say for lang de-DE your resx file will be named as MyResource.de-DE.resx
精彩评论