![]() |
| |
|
09.02.08 Using JavaScript to Localize Text By Mads Kristensen Just about every web project I've been involved in have, at one time or the other, needed to present some text to the visitor through JavaScript. It could be in an alert box or some other way and the problem has always been to localize that text into different languages using resource files or satellite assemblies. There are many ways of localizing the keys, but most of them involve writing out variables on a page with the localized text and then let the .js include files read from those variables. That's not a good solution. It would be much better if the .js files could be rendered with the localized text directly. At work, I've written exactly such a mechanism and here is a cleaned up, plug 'n play version you can use in your own web project. It's an HttpHandler that intercepts the requests to the .js files and performs the localization based on regular expressions. Here's how it works. Resource files It doesn't matter whether you use .resx files or satellite assemblies for localizing your text, because both methods work with the System.Resources.ResourceManager class. A resource file contains keys and a values. The key is always the same, but the value varies for each language. Each language is represented in its own .resx file and the name of the file decides which language it contains like below. ![]() If no language is added in the file name, it automatically becomes the default localizations – normally English. The three .resx files each contain one line with the key nameOfPage. The value in each of the files is localized text that can be referenced by the key. text.resx: Name of page text.da.resx: Sidens navn text.es.resx: Namo de la pago (Sorry, my Spanish is slightly rusty) The script method In the .js script files you need a way to specify a certain text as localizable. I've chosen to pick a syntax that looks like this: ![]() Notice that the Translate method above takes the localizable key as parameter. This is the syntax the regular expression in the HttpHandler is looking for.
The HttpHandler The HttpHandler does a couple of things. It reads the content of the script file, localizes the text, caches the response and compresses it using HTTP compression. It does all this in about 150 lines of easy readable code. ![]() This will trigger the correct .resx file to be used based on the visiting browser's language. If your .resx files aren't called text.resx or you use satellite assemblies, then you need to update the instantiation of the ResourceManager in the TranslateScript method in the handler. Download code and sample Download the code below and place the ScriptTranslator.cs in your App_Code folder. Then update your web.config with the web.config values found in the zip file. If you unzip the zip file, the entire contents can be opened directly in Visual Studio and you will be able to try it out easily. Localization.zip (8,37 kb) Comments About the Author: Mads Kristensen currently works as a Senior Developer at Traceworks located in Copenhagen, Denmark. Mads graduated from Copenhagen Technical Academy with a multimedia degree in 2003, but has been a professional developer since 2000. His main focus is on ASP.NET but is responsible for Winforms, Windows- and web services in his daily work as well. A true .NET developer with great passion for the simple solution. http://www.madskristensen.dk/ |
||||||||||||||||||||
|
| ||
| -- JavaProNews is an iEntry, Inc. publication -- iEntry, Inc. 2549 Richmond Rd. Lexington KY, 40509 2008 iEntry, Inc. All Rights Reserved Privacy Policy Legal archives | advertising info | news headlines | free newsletters | comments/feedback | submit article |