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.