views:

478

answers:

4

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!

A: 

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.

Stefan Steinegger
+2  A: 

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 :)

Metal450
A: 

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

Neo