This extension was replaced with the localization extension.
Localize your templates or attach any static JSON to the rendering process
Resources
extension lets you attach multiple JSON data objects to the report template and later conveniently accessed them using templating engines or in custom scripts. This can be useful to add a general configuration to the template or mainly localize the template.
The main idea behind this extension is to move all localizable strings from report templates to the JSON resources and then bind them using javascript templating engines rather then hardcode them. This extension then pushes the right localizable resource to the rendering process based on the requested language.
To localize a template you need to:
Attach resources containing localizable strings to the template. Each resource containing localizable string needs to be prefixed with a language name. So for example, attached resources should be data items with the name en-invoice
and de-invoice
.
Fill the template default language in the jsreport studio in the resources menu
Use templating engines to fill the localized strings from $localizedResource
property
{{$localizedResource.title}}
The $localizedResource
is a normal property on the root data context. When you are inside a loop, you need to reach it on the root.
handlebars
{{@root.$localizedResource.title}}
jsrender
{{:~root.$localizedResource.title}}
When having multiple resources for each language, use the resource names to reach the particular one
{{$localizedResource.invoice.title}}
{{$localizedResource.globals.title}}
Specify options.language
in the API call to specify desired language
Every template resource is parsed and provided to the templating engine rendering input. For convenience the resources are provided in two forms.
The first form can be reached in the main object's $resource
property. There is stored an object which contains all the attached resources' data distinguished by the resources names.
So, for example, template with attached resources:
data with name config1
{
"foo": "this is config1"
}
data with name config2
{
"foo2": "this is config2"
}
outputs "this is config1" when using jsrender
{{:$resource.config1.foo}}
output "this is config2" when using jsrender
{{:$resource.config2.foo2}}
The second form is represented as an array in $resources
property. This array contains every attached resource in its complete form including name
, shortid
and data
property. This can be used in some advanced scenarios. To be sure what is actually stored in the $resources
property you can dump the object in a common way you do in jsreport.
//helper function
function dumpResources(data) {
return JSON.stringify(data.$resources);
}
print helper function output using jsrender
{{:~dumpResources(#data}}
Custom jsreport script can use the following properties:
//equivalent to request.data.$resources
request.options.resources
//equivalent to request.data.$resource
request.options.resource
To specify language in the API call, you need to add language
property in the options
object.
POST:
https://jsreport-host/api/reportHeaders
: Content-Type: application/jsonBODY:
{ "template": { "shortid" : "g1PyBkARK" }, "data" : { ... }, "options": { "language": "en" } }
Resources are stored directly in the template document. Additionally to the resources
, this extension also adds property defaultLanguage
to the template document.
GET
http://jsreport-host/odata/templates('aaaa'){ "name": "template name", "content": "<h1>Hello world</h1>", "defaultLanguage": "en", ... "resources":{ "items":[ { "entitySet":"data", "shortid":"NJ5H9pkb" } ] } }