Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Changing where a resource is pulled during runtime?

I have a website that goes out to multiple clients. Sometimes a client will insist on minor changes. For reasons beyond my control, I have to comply no matter how minor the request. Usually this isn't a problem, I would just create a client specific version of the user control or page and overwrite the default one during build time or make a configuration setting to handle it.

Now that I am localizing the site, I'm curious about the best way to go about making minor wording changes.

Lets say I have a resource file called Resources.resx that has 300 resources in it. It has a resource called Continue. English value is "Continue", the French value is "Continuez".

Now one client, for whatever reason, wants it to say "Next" and "Après" and the others want to keep it the same. What is the best way to accomodate a request like this? (This is just a simple example).

The only two ways I can think of is to

  • Create another Resources.resx specific to the client, and replace the .dll during build time. Since I'd be completely replacing the dll, the new resource file would have to contain all 300 strings. The obvious problem being that I now have 2 resource files, each with 300 strings to maintain.
  • Create a custom user control/page and change it to use a custom resource file. e.g. SignIn.ascx would be replaced during the build and it would pull its resources from ClientName.resx instead of Resources.resx.

Are there any other things I could try? Is there any way to change it so that the application will always look in a ClientResources.resx file for the overridden values before actually look at the specified resource file?

like image 559
Brandon Avatar asked Nov 14 '22 10:11

Brandon


1 Answers

You could perhaps use the following template :

#if ClientName1 
Continue="Next";
#elif ClientName2
    Continue="Apres";
#else 
Continue="Continue" 
#endif

This allows you to specify all possible values in the same file (and the same variable in the same region), and you can easily define the symbol "ClientName1" from the commandline during the build.

like image 121
apoorv020 Avatar answered Dec 11 '22 17:12

apoorv020