Custom Factories
Mura allows you to create your own resource bundle factories, and fall back to Mura's original lookup hierarchy when a requested key-value is not found. This is especially useful when creating plugins, or integrating a custom application.
The code example below demonstrates how you could go about creating a custom resource bundle factory.
customResourceBundleDirectory = ExpandPath('#m.globalConfig('context')#/path/to/your/RBFactory/'); customFactory = new mura.resourceBundle.resourceBundleFactory( parentFactory = m.siteConfig('rbFactory') , resourceDirectory = customResourceBundleDirectory , locale = m.siteConfig('JavaLocale') );
You could wrap this up into a custom method to obtain a reference to your custom factory using something similar to the following example.
public any function getResourceBundleFactory(required struct m) { var resourceDirectory = ExpandPath('#arguments.m.globalConfig('context')#/plugins/MyPlugin/rb/'); return new mura.resourceBundle.resourceBundleFactory( parentFactory = arguments.m.siteConfig('rbFactory') , resourceDirectory = resourceDirectory , locale = arguments.m.siteConfig('JavaLocale') ); }
Once you've created your custom resource bundle factory, simply use {yourCustomFactoryVariableName}.getKey({yourKey})
.
So, for example, to output a key of "myCustomString
", with a custom factory variable named "customFactory
", use the following syntax.
<cfoutput> #customFactory.getKey('myCustomString')# </cfoutput>
Lookup Hierarchy
As previously mentioned, Mura will use the following lookup hierarchy when searching for key-value pairs in target ".properties
" files.
{customResourceBundleDirectory}/
{context}/{SiteID}/includes/themes/{ThemeName}/resourceBundles/
{context}/{SiteID}/includes/resourceBundles/
{context}/requirements/mura/resourceBundles/resources/