New Community Website

Ordinarily, you'd be at the right spot, but we've recently launched a brand new community website... For the community, by the community.

Yay... Take Me to the Community!

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Enhancements to DNN localization

In pre DNN 3.3 / 4.3 versions we had three different sets of resource files:
  • Base resources: these are the english (en-US) resource files that come with the product. These are considered the default and base for all other resources, and the last fallback resort when searching for a given resource string.
  • Translated resources: these are any given set of resources for a specific language other than the default one. These can also be considered the base resource files for a specific language.
  • Custom portal resources: when you wanted to overwrite a given message on a given portal you could create a personalized version of the resource file that included that message and provide a different version of the message. This customized version would only be aplicable in the portal for which it is defined.

With this approach we already had a great deal of flexibility to provide static localization for our portals. But it had two major problems for even improved extensibility:
  • If you wanted to customize a given resource key for ALL portals in a given installation you had to modify the base resource files. But now imagine what will happen when you upgrade your installation to a new DNN version or install an updated version of the language pack for that specific language. The modifications you made to the original file would be lost since (on upgrade or reinstall of languages packs) this file would be overwrote.
  • When creating a custom portal resource file ALL resource keys from the original file where copied to the customized version, even if only just 1 key was modified. This is not necessary, actually the customized file should only contain the keys that have a value different than the default one.

So to cover these issues we introduced some modifications on the language editor to support them:
  • Host customized resources: this is similar to the custom portal resources but the changes made here will apply to all portals on the installation. This will save you from doing modifications on the base resource files and prevent losing them when you install a new version.
  • Incremental resource files: all customized resource files (host or portal) will use an incremental/partial approach, in the sense that they will only contain the keys that are different from the base resource file.
  • Display of default value: in previous versions, the default value for a resource key on the language editor was always the base english version. We changed this so the default is now take from the base resource file for the current language if you are editing a custom file or english when you are editing the base resource files.
    So when creating a custom portal resource for spanish the default value will be the value from the base resource file for the spanish language pack, because in fact you are creating a customized version for this specific value.

Another great feature we added on the localization is to help modules reuse resource strings.
Again, in previous versions all .ascx files had they related resource file where we added the resources. The issue was that all keys used in user interface by means of a "resoucekey=" attribue were local to any .ascx control.
This was a bit boring since usually all modules tend to repeat the same messages and labels on most of the modules controls it includes. So you had to include again all the same keys in all resource files where they were needed.

We changed this to leverage the use of the module "SharedResources.resx" file. Now all keys included in this will also be available from the declarative part of the .ascx control. So you will be able to move the messages that are used on more than one control to this file. This will be a great help for translators since they will only have 1 version of these items.


Comment Form

Only registered users may post comments.


Aderson Oliveira (22)
Alec Whittington (11)
Alessandra Davies (3)
Alex Shirley (10)
Andrew Hoefling (3)
Andrew Nurse (30)
Andy Tryba (1)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (37)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Bogdan Litescu (1)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (213)
Chris Paterra (55)
Clint Patterson (108)
Cuong Dang (21)
Daniel Bartholomew (2)
Daniel Mettler (181)
Daniel Valadas (48)
Dave Buckner (2)
David Poindexter (12)
David Rodriguez (3)
Dennis Shiao (1)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (80)
Francisco Perez Andres (17)
Geoff Barlow (12)
George Alatrash (12)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (274)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Kelly Ford (4)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matt Rutledge (2)
Matthias Schlomann (16)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Miguel Gatmaytan (3)
Mike Horton (19)
Mitchel Sellers (40)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Oliver Hine (1)
Patricio F. Salinas (1)
Patrick Ryan (1)
Peter Donker (54)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Sacha Trauwaen (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott Schlesier (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Steven Fisher (1)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (3)
Tycho de Waard (4)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (40)
Will Strohl (180)
William Severance (5)
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out
What is Liquid Content?
Find Out