← Back to team overview

dhis2-devs team mailing list archive

[Branch ~dhis2-devs-core/dhis2/trunk] Rev 5743: (DV) First pass at i18n data visualizer module.

 

------------------------------------------------------------
revno: 5743
committer: Jason P. Pickering <jason.p.pickering@xxxxxxxxx>
branch nick: dhis2
timestamp: Wed 2012-01-18 07:05:02 +0200
message:
  (DV) First pass at i18n data visualizer module.
added:
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties
  dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm
modified:
  dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/struts.xml
  dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js
  dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html


--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk

Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== added directory 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org'
=== added directory 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp'
=== added directory 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis'
=== added directory 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer'
=== added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module.properties	2012-01-18 05:05:02 +0000
@@ -0,0 +1,81 @@
+title=DHIS 2 Data Visualizer
+chart_type=Chart type
+column_chart= Column chart
+stacked_column_chart=Stacked column chart
+bar_chart=Bar chart
+stacked_bar_chart=Stacked bar chart
+line_chart=Line chart
+area_chart=Area chart
+pie_chart=Pie chart
+series=Series
+category=Category
+filter=Filter
+alert_no_indicators_selected=No indicators or data elements selected.
+no_periods_selected=No periods selected.
+no_orgunits_selected=No organisation units selected.
+example_chart=Example chart
+loading=Loading...
+no_data=No data
+value=Value
+indicators=Indicators
+select_group=Select group
+data_elements=Data elements
+all_indicator_groups=[ All indicator groups ]
+available_indicators=Available indicators
+selected_indicators=Selected indicators
+available_data_elements=Available data elements
+periods=Periods
+months=Months
+last_month=Last month
+last_12_months=Last 12 months
+quarters=Quarters
+last_quarter=Last quarter
+last_4_quarters=Last 4 quarters
+six_months=Six months
+last_six_month=Last 6 months
+last_two_six_month=Last two 6 months
+years=Years
+last_year=Last year
+last_5_years=Last 5 years
+organisation_units=Organisation units
+select_all_children=Select all children
+chart_options=Chart options
+png_only=NB! These fields are for the PNG version only
+trend_line=Trend line
+hide_subtitle=Hide subtitle
+hide_legend=Hide legend
+user_orgunit=User orgunit
+x_axis_label=X axis label
+y_axis_label=Y axis label
+target_line_value=Target line value
+target_line_label=Target line labels
+show_hide_chart_settings=Show/hide chart settings
+update=Update
+data_table=Data table
+favorites=Favorites..
+manage_favorites=Manage favorites
+sort_by=Sort by
+system=System
+name=Name
+last_updated=Last updated
+rename=Rename
+rename_favorite=Rename favorite
+cancel=Cancel
+name_already_in_use=*Name already in use
+delete=Delete
+delete_favorite=Delete favorite
+are_you_sure=Are you sure?
+save=Save
+example_chart_cannot_be_saved=* The example chart cannot be saved.
+overwrite=Overwrite
+download_as=Download as
+browser_download_alert=Please use Chrome, Firefox, Opera or Safari to export images.
+no_svg_format=No SVG format
+image_png=Image (PNG)
+hide_data_table=Hide data table
+no_data_elements_selected=No data elements selected.
+data_elemenent_store_does_not_exist=Data element store does not exist.
+saving=Saving
+renaming=Renaming
+deleting=Deleting
+

=== added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/org/hisp/dhis/visualizer/i18n_module_fr_FR.properties	2012-01-18 05:05:02 +0000
@@ -0,0 +1,2 @@
+title=DHIS 2 Data Visualizer
+chart_type=Type de chart
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/struts.xml	2011-12-22 14:36:02 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/resources/struts.xml	2012-01-18 05:05:02 +0000
@@ -82,6 +82,12 @@
 		<action name="exportImage" class="org.hisp.dhis.visualizer.action.ExportImageAction">
 			<result name="success" type="outputStreamResult"/>
 		</action>
+
+        <!-- i18n -->
+
+        <action name="i18n" class="org.hisp.dhis.visualizer.action.NoAction">
+            <result name="success" type="velocity-javascript">/dhis-web-visualizer/i18n.vm</result>
+        </action>
 		
 	</package>
 </struts>

=== modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js	2012-01-12 14:59:21 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/app.js	2012-01-18 05:05:02 +0000
@@ -42,23 +42,23 @@
         dimension: {
             data: {
                 value: 'data',
-                rawvalue: 'Data'
+                rawvalue: 'Data'  /*TODO i18n?*/
             },
             indicator: {
                 value: 'indicator',
-                rawvalue: 'Indicator'
+                rawvalue: 'Indicator'     /*TODO i18n?*/
             },
             dataelement: {
                 value: 'dataelement',
-                rawvalue: 'Data element'
+                rawvalue: 'Data element'     /*TODO i18n?*/
             },
             period: {
                 value: 'period',
-                rawvalue: 'Period'
+                rawvalue: 'Period'         /*TODO i18n?*/
             },
             organisationunit: {
                 value: 'organisationunit',
-                rawvalue: 'Organisation unit'
+                rawvalue: 'Organisation unit'   /*TODO i18n?*/
             }
         },        
         chart: {
@@ -337,12 +337,12 @@
                             a.push(r.data.id);
                         });
                         if (exception && !a.length) {
-                            alert('No data elements selected');
+                            alert(G.i18n.no_data_elements_selected);
                         }
                         return a;
                     }
                     else {
-                        alert('Data element store does not exist');
+                        alert(G.i18n.data_element_store_does_not_exist);
                     }
                 }
             },
@@ -368,7 +368,7 @@
                         });
                     }
                     if (exception && !a.length) {
-                        alert('No indicators or data elements selected');
+                        alert(G.i18n.alert_no_indicators_selected);
                     }
                     return a;
                 }                    
@@ -396,7 +396,7 @@
                         }
                     });
                     if (exception && !a.length) {
-                        alert('No periods selected');
+                        alert(G.i18n.no_periods_selected);
                     }
                     return a;
                 },
@@ -435,7 +435,7 @@
                         }
                     });
                     if (exception && !a.length) {
-                        alert('No periods selected');
+                        alert(G.i18n.no_periods_selected);
                     }
                     return a;
                 },
@@ -448,7 +448,7 @@
                         valid = item.getValue() ? true : valid;
                     });
                     if (exception && !valid) {
-                        alert('No periods selected');
+                        alert(G.i18n.no_periods_selected);
                     }
                     return a;
                 }   
@@ -473,7 +473,7 @@
                         a.push(DV.util.string.getEncodedString(r.data.text));
                     });
                     if (exception && !a.length) {
-                        alert('No organisation units selected');
+                        alert( G.i18n.no_orgunits_selected );
                     }
                     return a;
                 },
@@ -489,7 +489,7 @@
                         a.push(DV.util.string.getEncodedString(r.data.id));
                     });
                     if (exception && !a.length) {
-                        alert('No organisation units selected');
+                        alert( G.i18n.no_orgunits_selected );
                     }
                     return a;
                 }                    
@@ -526,7 +526,7 @@
             getTitle: function() {
                 return {
                     type: 'text',
-                    text: DV.init.cmd === DV.conf.finals.cmd.init ? 'Example chart' : DV.state.filter.names[0],
+                    text: DV.init.cmd === DV.conf.finals.cmd.init ? G.i18n.example_chart : DV.state.filter.names[0],
                     font: 'bold 15px arial',
                     fill: '#222',
                     width: 300,
@@ -705,6 +705,7 @@
                 return this.allValuesAreIntegers(DV.value.values) ? '0' : '0.0';
             }
         },
+       /*FIXME:This is probably not going to work as intended with UNICODE?*/
         string: {
             getEncodedString: function(text) {
                 return text.replace(/[^a-zA-Z 0-9(){}<>_!+;:?*&%#-]+/g,'');
@@ -723,7 +724,7 @@
         crud: {
             favorite: {
                 create: function(fn, isUpdate) {
-                    DV.util.mask.setMask(DV.cmp.favorite.window, 'Saving...');
+                    DV.util.mask.setMask(DV.cmp.favorite.window, G.i18n.saving + '...');
                     var params = DV.state.getParams();
                     params.name = DV.cmp.favorite.name.getValue();
                     params.trendLine = DV.cmp.favorite.trendline.getValue();
@@ -770,7 +771,7 @@
                         alert('Name is already in use');
                         return;
                     }
-                    DV.util.mask.setMask(DV.cmp.favorite.window, 'Renaming...');
+                    DV.util.mask.setMask(DV.cmp.favorite.window, G.i18n.renaming + '...');
                     var r = DV.cmp.favorite.grid.getSelectionModel().getSelection()[0];
                     var url = DV.cmp.favorite.system.getValue() ? DV.conf.finals.ajax.favorite_addorupdatesystem : DV.conf.finals.ajax.favorite_addorupdate;
                     Ext.Ajax.request({
@@ -787,7 +788,7 @@
                     });
                 },
                 del: function(fn) {
-                    DV.util.mask.setMask(DV.cmp.favorite.window, 'Deleting...');
+                    DV.util.mask.setMask(DV.cmp.favorite.window, G.i18n.deleting + '...');
                     var baseurl = DV.conf.finals.ajax.path_visualizer + DV.conf.finals.ajax.favorite_delete,
                         selection = DV.cmp.favorite.grid.getSelectionModel().getSelection();
                     Ext.Array.each(selection, function(item) {
@@ -1162,7 +1163,7 @@
     DV.value = {
         values: [],
         getValues: function(exe) {
-            DV.util.mask.setMask(DV.cmp.region.center, 'Loading...');
+            DV.util.mask.setMask(DV.cmp.region.center, G.i18n.loading);
             var params = [],
                 i = DV.conf.finals.dimension.indicator.value,
                 d = DV.conf.finals.dimension.dataelement.value;
@@ -1182,7 +1183,7 @@
                     DV.value.values = DV.util.value.jsonfy(r);
                     if (!DV.value.values.length) {
                         DV.mask.hide();
-                        alert('No data');
+                        alert(G.i18n.no_data);
                         return;
                     }
                     
@@ -1472,7 +1473,7 @@
                         height: DV.conf.layout.east_gridcolumn_height
                     },
                     {
-                        text: 'Value',
+                        text: G.i18n.value,
                         dataIndex: 'v',
                         width: 80,
                         height: DV.conf.layout.east_gridcolumn_height
@@ -1543,14 +1544,14 @@
                         items: [
                             {
                                 xtype: 'label',
-                                text: 'Chart type',
+                                text: G.i18n.chart_type,
                                 style: 'font-size:11px; font-weight:bold; padding:13px 8px 0 10px'
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/column.png',
                                 name: DV.conf.finals.chart.column,
-                                tooltip: 'Column chart',
+                                tooltip: G.i18n.column_chart,
 								width: 40,
                                 pressed: true
                             },
@@ -1558,42 +1559,42 @@
 								xtype: 'button',
                                 icon: 'images/column-stacked.png',
                                 name: DV.conf.finals.chart.stackedcolumn,
-                                tooltip: 'Stacked column chart',
+                                tooltip: G.i18n.stacked_column_chart,
 								width: 40
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/bar.png',
                                 name: DV.conf.finals.chart.bar,
-                                tooltip: 'Bar chart',
+                                tooltip: G.i18n.bar_chart,
 								width: 40
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/bar-stacked.png',
                                 name: DV.conf.finals.chart.stackedbar,
-                                tooltip: 'Stacked bar chart',
+                                tooltip: G.i18n.stacked_bar_chart,
 								width: 40
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/line.png',
                                 name: DV.conf.finals.chart.line,
-                                tooltip: 'Line chart',
+                                tooltip: G.i18n.line_chart,
 								width: 40
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/area.png',
                                 name: DV.conf.finals.chart.area,
-                                tooltip: 'Area chart',
+                                tooltip: G.i18n.area_chart,
 								width: 40
                             },
                             {
 								xtype: 'button',
                                 icon: 'images/pie.png',
                                 name: DV.conf.finals.chart.pie,
-                                tooltip: 'Pie chart',
+                                tooltip: G.i18n.pie_chart,
 								width: 40
                             }
                         ]
@@ -1609,7 +1610,7 @@
                                 items: [
                                     {
                                         xtype: 'label',
-                                        text: 'Series',
+                                        text: G.i18n.series,
                                         style: 'font-size:11px; font-weight:bold; padding:0 3px'
                                     },
                                     { bodyStyle: 'padding:1px 0; border-style:none;	background-color:transparent' },
@@ -1617,7 +1618,7 @@
                                         xtype: 'combobox',
                                         cls: 'dv-combo',
                                         name: DV.conf.finals.chart.series,
-                                        emptyText: 'Series',
+                                        emptyText: G.i18n.series,
                                         queryMode: 'local',
                                         editable: false,
                                         valueField: 'id',
@@ -1642,7 +1643,7 @@
                                 items: [
                                     {
                                         xtype: 'label',
-                                        text: 'Category',
+                                        text: G.i18n.category,
                                         style: 'font-size:11px; font-weight:bold; padding:0 3px'
                                     },
                                     { bodyStyle: 'padding:1px 0; border-style:none;	background-color:transparent' },
@@ -1650,7 +1651,7 @@
                                         xtype: 'combobox',
                                         cls: 'dv-combo',
                                         name: DV.conf.finals.chart.category,
-                                        emptyText: 'Category',
+                                        emptyText: G.i18n.category,
                                         queryMode: 'local',
                                         editable: false,
                                         lastQuery: '',
@@ -1684,7 +1685,7 @@
                                         xtype: 'combobox',
                                         cls: 'dv-combo',
                                         name: DV.conf.finals.chart.filter,
-                                        emptyText: 'Filter',
+                                        emptyText: G.i18n.filter,
                                         queryMode: 'local',
                                         editable: false,
                                         lastQuery: '',
@@ -1711,7 +1712,7 @@
                                 xtype: 'fieldset',
                                 cls: 'dv-fieldset',
                                 name: DV.conf.finals.dimension.indicator.value,
-                                title: '<a href="javascript:DV.util.fieldset.toggleIndicator();" class="dv-fieldset-title-link">Indicators</a>',
+                                title: '<a href="javascript:DV.util.fieldset.toggleIndicator();" class="dv-fieldset-title-link">' + G.i18n.indicators + '</a>',
                                 collapsible: true,
                                 width: DV.conf.layout.west_fieldset_width,
                                 items: [
@@ -1722,7 +1723,7 @@
                                         width: DV.conf.layout.west_fieldset_width - 22,
                                         valueField: 'id',
                                         displayField: 'name',
-                                        fieldLabel: 'Select group',
+                                        fieldLabel: G.i18n.select_group,
                                         labelStyle: 'padding-left:7px;',
                                         labelWidth: 90,
                                         editable: false,
@@ -1739,7 +1740,7 @@
                                             },
                                             listeners: {
                                                 load: function(s) {
-                                                    s.add({id: 0, name: '[ All indicator groups ]', index: -1});
+                                                    s.add({id: 0, name: G.i18n.all_indicator_groups, index: -1});
                                                     s.sort('index', 'ASC');
                                                 }
                                             }
@@ -1777,7 +1778,7 @@
                                                 tbar: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Available indicators',
+                                                        text: G.i18n.available_indicators,
                                                         cls: 'dv-toolbar-multiselect-left-label'
                                                     },
                                                     '->',
@@ -1842,7 +1843,7 @@
                                                     '->',
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Selected indicators',
+                                                        text: G.i18n.selected_indicators,
                                                         cls: 'dv-toolbar-multiselect-right-label'
                                                     }
                                                 ],
@@ -1873,7 +1874,7 @@
                                 xtype: 'fieldset',
                                 cls: 'dv-fieldset',
                                 name: DV.conf.finals.dimension.dataelement.value,
-                                title: '<a href="javascript:DV.util.fieldset.toggleDataElement();" class="dv-fieldset-title-link">Data elements</a>',
+                                title: '<a href="javascript:DV.util.fieldset.toggleDataElement();" class="dv-fieldset-title-link">' + G.i18n.data_elements + '</a>',
                                 collapsed: true,
                                 collapsible: true,
                                 items: [
@@ -1938,7 +1939,7 @@
                                                 tbar: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Available data elements',
+                                                        text: G.i18n.available_data_elements,
                                                         cls: 'dv-toolbar-multiselect-left-label'
                                                     },
                                                     '->',
@@ -2003,7 +2004,7 @@
                                                     '->',
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Selected data elements',
+                                                        text: G.i18n.selected_data_elements,
                                                         cls: 'dv-toolbar-multiselect-right-label'
                                                     }
                                                 ],
@@ -2034,7 +2035,7 @@
                                 xtype: 'fieldset',
                                 cls: 'dv-fieldset',
                                 name: DV.conf.finals.dimension.period.value,
-                                title: '<a href="javascript:DV.util.fieldset.togglePeriod();" class="dv-fieldset-title-link">Periods</a>',
+                                title: '<a href="javascript:DV.util.fieldset.togglePeriod();" class="dv-fieldset-title-link">' + G.i18n.periods +'</a>',
                                 collapsed: true,
                                 collapsible: true,
                                 cmp: [],
@@ -2061,18 +2062,18 @@
                                                 items: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Months',
+                                                        text: G.i18n.months,
                                                         cls: 'dv-label-period-heading'
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'lastMonth',
-                                                        boxLabel: 'Last month'
+                                                        boxLabel: G.i18n.last_month
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'last12Months',
-                                                        boxLabel: 'Last 12 months',
+                                                        boxLabel: G.i18n.last_12_months,
                                                         checked: true
                                                     }
                                                 ]
@@ -2094,18 +2095,18 @@
                                                 items: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Quarters',
+                                                        text: G.i18n.quarters,
                                                         cls: 'dv-label-period-heading'
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'lastQuarter',
-                                                        boxLabel: 'Last quarter'
+                                                        boxLabel: G.i18n.last_quarter
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'last4Quarters',
-                                                        boxLabel: 'Last 4 quarters'
+                                                        boxLabel: G.i18n.last_4_quarters
                                                     }
                                                 ]
                                             },
@@ -2126,18 +2127,18 @@
                                                 items: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Six-months',
+                                                        text: G.i18n.six_months,
                                                         cls: 'dv-label-period-heading'
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'lastSixMonth',
-                                                        boxLabel: 'Last six-month'
+                                                        boxLabel: G.i18n.last_six_month
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'last2SixMonths',
-                                                        boxLabel: 'Last 2 six-months'
+                                                        boxLabel: G.i18n.last_two_six_month
                                                     }
                                                 ]
                                             }
@@ -2165,18 +2166,18 @@
                                                 items: [
                                                     {
                                                         xtype: 'label',
-                                                        text: 'Years',
+                                                        text: G.i18n.years,
                                                         cls: 'dv-label-period-heading'
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'thisYear',
-                                                        boxLabel: 'This year'
+                                                        boxLabel: G.i18n.last_year
                                                     },
                                                     {
                                                         xtype: 'checkbox',
                                                         paramName: 'last5Years',
-                                                        boxLabel: 'Last 5 years'
+                                                        boxLabel: G.i18n.last_5_years
                                                     }
                                                 ]
                                             }
@@ -2196,7 +2197,7 @@
                                 xtype: 'fieldset',
                                 cls: 'dv-fieldset',
                                 name: DV.conf.finals.dimension.organisationunit.value,
-                                title: '<a href="javascript:DV.util.fieldset.toggleOrganisationUnit();" class="dv-fieldset-title-link">Organisation units</a>',
+                                title: '<a href="javascript:DV.util.fieldset.toggleOrganisationUnit();" class="dv-fieldset-title-link">' + G.i18n.organisation_units + '</a>',
                                 collapsed: true,
                                 collapsible: true,
                                 items: [
@@ -2252,7 +2253,7 @@
                                                 if (!r.data.leaf) {
                                                     v.menu.add({
                                                         id: 'treepanel-contextmenu-item',
-                                                        text: 'Select all children',
+                                                        text: G.i18n.select_all_children,
                                                         icon: 'images/node-select-child.png',
                                                         handler: function() {
                                                             r.expand(false, function() {
@@ -2290,12 +2291,12 @@
                                 xtype: 'fieldset',
                                 cls: 'dv-fieldset',
                                 name: 'options',
-                                title: '<a href="javascript:DV.util.fieldset.toggleOptions();" class="dv-fieldset-title-link-alt1">Chart options</a>',
+                                title: '<a href="javascript:DV.util.fieldset.toggleOptions();" class="dv-fieldset-title-link-alt1">' + G.i18n.chart_options +'</a>',
                                 collapsed: true,
                                 collapsible: true,
                                 items: [
                                     {
-                                        html: 'NB! These fields are for the PNG version only',
+                                        html: G.i18n.png_only,
                                         bodyStyle: 'border:0 none; color:#555; font-style:italic; padding-bottom:10px'
                                     },
                                     {
@@ -2307,7 +2308,7 @@
                                                 xtype: 'checkbox',
                                                 cls: 'dv-checkbox-alt1',
                                                 style: 'margin-right:26px',
-                                                boxLabel: 'Trend line',
+                                                boxLabel: G.i18n.trend_line,
                                                 labelWidth: DV.conf.layout.form_label_width,
                                                 listeners: {
                                                     added: function() {
@@ -2319,7 +2320,7 @@
                                                 xtype: 'checkbox',
                                                 cls: 'dv-checkbox-alt1',
                                                 style: 'margin-right:26px',
-                                                boxLabel: 'Hide subtitle',
+                                                boxLabel: G.i18n.hide_subtitle,
                                                 labelWidth: DV.conf.layout.form_label_width,
                                                 listeners: {
                                                     added: function() {
@@ -2331,7 +2332,7 @@
                                                 xtype: 'checkbox',
                                                 cls: 'dv-checkbox-alt1',
                                                 style: 'margin-right:26px',
-                                                boxLabel: 'Hide legend',
+                                                boxLabel: G.i18n.hide_legend,
                                                 labelWidth: DV.conf.layout.form_label_width,
                                                 listeners: {
                                                     added: function() {
@@ -2342,7 +2343,7 @@
                                             {
                                                 xtype: 'checkbox',
                                                 cls: 'dv-checkbox-alt1',
-                                                boxLabel: 'User orgunit',
+                                                boxLabel: G.i18n.user_orgunit,
                                                 labelWidth: DV.conf.layout.form_label_width,
                                                 listeners: {
                                                     added: function() {
@@ -2361,7 +2362,7 @@
                                                 xtype: 'textfield',
                                                 cls: 'dv-textfield-alt1',
                                                 style: 'margin-right:4px',
-                                                fieldLabel: 'X axis label',
+                                                fieldLabel: G.i18n.x_axis_label,
                                                 labelAlign: 'top',
                                                 labelSeparator: '',
                                                 maxLength: 100,
@@ -2377,7 +2378,7 @@
                                             {
                                                 xtype: 'textfield',
                                                 cls: 'dv-textfield-alt1',
-                                                fieldLabel: 'Y axis label',
+                                                fieldLabel: G.i18n.y_axis_label,
                                                 labelAlign: 'top',
                                                 labelSeparator: '',
                                                 maxLength: 100,
@@ -2402,7 +2403,7 @@
                                                 cls: 'dv-textfield-alt1',
                                                 style: 'margin-right:4px',
                                                 hideTrigger: true,
-                                                fieldLabel: 'Target line value',
+                                                fieldLabel: G.i18n.target_line_value,
                                                 labelAlign: 'top',
                                                 labelSeparator: '',
                                                 maxLength: 100,
@@ -2420,7 +2421,7 @@
                                             {
                                                 xtype: 'textfield',
                                                 cls: 'dv-textfield-alt1',
-                                                fieldLabel: 'Target line label',
+                                                fieldLabel: G.i18n.target_line_label,
                                                 labelAlign: 'top',
                                                 labelSeparator: '',
                                                 maxLength: 100,
@@ -2488,7 +2489,7 @@
                             name: 'resizewest',
 							cls: 'dv-toolbar-btn-2',
                             text: '<<<',
-                            tooltip: 'Show/hide chart settings',
+                            tooltip: G.i18n.show_hide_chart_settings,
                             handler: function() {
                                 var p = DV.cmp.region.west;
                                 if (p.collapsed) {
@@ -2507,7 +2508,7 @@
                         {
                             xtype: 'button',
 							cls: 'dv-toolbar-btn-1',
-                            text: 'Update',
+                            text: G.i18n.update,
                             handler: function() {
                                 DV.exe.execute(true, DV.init.cmd);
                             }
@@ -2515,7 +2516,7 @@
                         {
                             xtype: 'button',
 							cls: 'dv-toolbar-btn-2',
-                            text: 'Data table',
+                            text: G.i18n.data_table,
                             handler: function() {
                                 var p = DV.cmp.region.east;
                                 if (p.collapsed && p.items.length) {
@@ -2532,7 +2533,7 @@
                         {
                             xtype: 'button',
 							cls: 'dv-toolbar-btn-2',
-                            text: 'Favorites..',
+                            text: G.i18n.favorites,
                             listeners: {
                                 afterrender: function(b) {
                                     this.menu = Ext.create('Ext.menu.Menu', {
@@ -2548,7 +2549,7 @@
                                                     }
                                                     else {
                                                         DV.cmp.favorite.window = Ext.create('Ext.window.Window', {
-                                                            title: 'Manage favorites',
+                                                            title: G.i18n.manage_favorites,
                                                             iconCls: 'dv-window-title-favorite',
                                                             bodyStyle: 'padding:8px; background-color:#fff',
 															width: DV.conf.layout.grid_favorite_width,
@@ -2585,7 +2586,7 @@
                                                                             xtype: 'checkbox',
                                                                             cls: 'dv-checkbox',
                                                                             style: 'padding-bottom:2px',
-                                                                            fieldLabel: 'System',
+                                                                            fieldLabel: G.i18n.system,
                                                                             labelWidth: DV.conf.layout.form_label_width,
                                                                             disabled: !DV.init.system.user.isAdmin,
                                                                             listeners: {
@@ -2630,7 +2631,7 @@
                                                                         },
                                                                         items: [
                                                                             {
-                                                                                text: 'Sort by..',
+                                                                                text: G.i18n.sort_by + '..',
                                                                                 cls: 'dv-toolbar-btn-2',
                                                                                 listeners: {
                                                                                     added: function() {
@@ -2651,7 +2652,7 @@
                                                                                                     vertical: true,
                                                                                                     items: [
                                                                                                         {
-                                                                                                            boxLabel: 'Name',
+                                                                                                            boxLabel: G.i18n.name,
                                                                                                             name: 'sortby',
                                                                                                             handler: function() {
                                                                                                                 if (this.getValue()) {
@@ -2664,7 +2665,7 @@
                                                                                                             }
                                                                                                         },
                                                                                                         {
-                                                                                                            boxLabel: 'System',
+                                                                                                            boxLabel: G.i18n.system,
                                                                                                             name: 'sortby',
                                                                                                             handler: function() {
                                                                                                                 if (this.getValue()) {
@@ -2677,7 +2678,7 @@
                                                                                                             }
                                                                                                         },
                                                                                                         {
-                                                                                                            boxLabel: 'Last updated',
+                                                                                                            boxLabel:  G.i18n.last_updated,
                                                                                                             name: 'sortby',
                                                                                                             checked: true,
                                                                                                             handler: function() {
@@ -2699,7 +2700,7 @@
                                                                             },
                                                                             '->',
                                                                             {
-                                                                                text: 'Rename',
+                                                                                text: G.i18n.rename,
                                                                                 cls: 'dv-toolbar-btn-2',
                                                                                 disabled: true,
                                                                                 xable: function() {
@@ -2713,7 +2714,7 @@
                                                                                 handler: function() {
                                                                                     var selected = DV.cmp.favorite.grid.getSelectionModel().getSelection()[0];
                                                                                     var w = Ext.create('Ext.window.Window', {
-                                                                                        title: 'Rename favorite',
+                                                                                        title: G.i18n.rename_favorite,
                                                                                         layout: 'fit',
                                                                                         width: DV.conf.layout.window_confirm_width,
                                                                                         bodyStyle: 'padding:10px 5px; background-color:#fff; text-align:center',
@@ -2748,13 +2749,13 @@
 																							},
 																							'->',
                                                                                             {
-                                                                                                text: 'Cancel',
+                                                                                                text: G.i18n.cancel,
                                                                                                 handler: function() {
                                                                                                     this.up('window').close();
                                                                                                 }
                                                                                             },
                                                                                             {
-                                                                                                text: 'Rename',
+                                                                                                text: G.i18n.rename,
                                                                                                 disabled: true,
                                                                                                 xable: function() {
                                                                                                     var value = this.up('window').cmp.name.getValue();
@@ -2765,7 +2766,7 @@
 																											return;
 																										}
 																										else {
-																											DV.cmp.favorite.rename.label.setText('* Name already in use');
+																											DV.cmp.favorite.rename.label.setText(G.i18n.name_already_in_use);
 																										}
 																									}
 																									this.disable();
@@ -2799,7 +2800,7 @@
                                                                                 }
                                                                             },
                                                                             {
-                                                                                text: 'Delete',
+                                                                                text: G.i18n.delete,
                                                                                 cls: 'dv-toolbar-btn-2',
                                                                                 disabled: true,
                                                                                 xable: function() {
@@ -2819,13 +2820,13 @@
                                                                                             str += '<br/>' + out;
                                                                                         }
                                                                                         var w = Ext.create('Ext.window.Window', {
-                                                                                            title: 'Delete favorites',
+                                                                                            title: G.i18n.delete_favorite,
                                                                                             width: DV.conf.layout.window_confirm_width,
                                                                                             bodyStyle: 'padding:10px 5px; background-color:#fff; text-align:center',
                                                                                             modal: true,
                                                                                             items: [
                                                                                                 {
-                                                                                                    html: 'Are you sure?',
+                                                                                                    html: G.i18n.are_you_sure,
                                                                                                     bodyStyle: 'border-style:none'
                                                                                                 },
                                                                                                 {
@@ -2835,14 +2836,14 @@
                                                                                             ],
                                                                                             bbar: [
                                                                                                 {
-                                                                                                    text: 'Cancel',
+                                                                                                    text: G.i18n.cancel,
                                                                                                     handler: function() {
                                                                                                         this.up('window').close();
                                                                                                     }
                                                                                                 },
                                                                                                 '->',
                                                                                                 {
-                                                                                                    text: 'Delete',
+                                                                                                    text: G.i18n.delete,
                                                                                                     handler: function() {
                                                                                                         this.up('window').close();
                                                                                                         DV.util.crud.favorite.del(function() {
@@ -2893,7 +2894,7 @@
                                                                 },																
                                                                 '->',
                                                                 {
-                                                                    text: 'Save',
+                                                                    text: G.i18n.save,
                                                                     disabled: true,
                                                                     xable: function() {
                                                                         if (DV.state.isRendered) {
@@ -2908,7 +2909,7 @@
                                                                         }
                                                                         else {
                                                                             if (DV.cmp.favorite.name.getValue()) {
-                                                                                DV.cmp.favorite.label.setText('* The example chart cannot be saved');
+                                                                                DV.cmp.favorite.label.setText(G.i18n.example_chart_cannot_be_saved);
                                                                             }
                                                                             else {
                                                                                 DV.cmp.favorite.label.setText('');
@@ -2928,7 +2929,7 @@
                                                                                     modal: true,
                                                                                     items: [
                                                                                         {
-                                                                                            html: 'Are you sure?',
+                                                                                            html: G.i18n.area_you_sure,
                                                                                             bodyStyle: 'border-style:none'
                                                                                         },
                                                                                         {
@@ -2938,14 +2939,14 @@
                                                                                     ],
                                                                                     bbar: [
                                                                                         {
-                                                                                            text: 'Cancel',
+                                                                                            text: G.i18n.cancel,
                                                                                             handler: function() {
                                                                                                 DV.cmp.favorite.window.close();
                                                                                             }
                                                                                         },
                                                                                         '->',
                                                                                         {
-                                                                                            text: 'Overwrite',
+                                                                                            text: G.i18n.overwrite,
                                                                                             handler: function() {
                                                                                                 this.up('window').close();
                                                                                                 DV.util.crud.favorite.update(function() {
@@ -3051,12 +3052,12 @@
                         {
                             xtype: 'button',
 							cls: 'dv-toolbar-btn-2',
-                            text: 'Download as..',
+                            text: G.i18n.download_as,
                             execute: function(type) {
                                 var svg = document.getElementsByTagName('svg');
                                 
                                 if (svg.length < 1) {
-                                    alert('Please use Chrome, Firefox, Opera or Safari to export images');
+                                    alert(G.i18n.browser_download_alert);
                                     return;
                                 }
                                 
@@ -3071,7 +3072,7 @@
                                     exportForm.submit();
                                 }
                                 else {
-                                    alert("No svg/format");
+                                    alert(G.i18n.no_svg_format);
                                 }
                             },
                             listeners: {
@@ -3081,7 +3082,7 @@
                                         showSeparator: false,
                                         items: [
                                             {
-                                                text: 'Image (PNG)',
+                                                text: G.i18n.image_png,
                                                 iconCls: 'dv-menu-item-png',
                                                 minWidth: 105,
                                                 handler: function() {
@@ -3115,7 +3116,7 @@
                             name: 'resizeeast',
 							cls: 'dv-toolbar-btn-2',
                             text: '>>>',
-                            tooltip: 'Hide data table',
+                            tooltip: G.i18n.hide_data_table,
                             hidden: true,
                             handler: function() {
                                 DV.cmp.region.east.collapse();

=== modified file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html	2011-11-25 12:25:07 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/app/index.html	2012-01-18 05:05:02 +0000
@@ -12,6 +12,7 @@
         <input type="hidden" id="typeField" name="type"/>
     </form>
 
+    <script type="text/javascript" src="i18n.action"></script>
     <script type="text/javascript" src="lib/ext/ext-all.js"></script>
     <script type="text/javascript" src="app.js"></script>
 </body>

=== added file 'dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm'
--- dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-visualizer/src/main/webapp/dhis-web-visualizer/i18n.vm	2012-01-18 05:05:02 +0000
@@ -0,0 +1,86 @@
+var G = {};
+
+G.i18n = {
+title: '$encoder.jsEscape($i18n.getString( 'title' ) , "'")',
+chart_type: '$encoder.jsEscape($i18n.getString( 'chart_type' ) , "'")',
+column_chart: '$encoder.jsEscape($i18n.getString( 'column_chart' ) , "'")',
+stacked_column_chart: '$encoder.jsEscape($i18n.getString( 'stacked_column_chart' ) , "'")',
+bar_chart:  '$encoder.jsEscape($i18n.getString( 'bar_chart' ) , "'")',
+stacked_bar_chart: '$encoder.jsEscape($i18n.getString( 'stacked_bar_chart' ) , "'")',
+line_chart:    '$encoder.jsEscape($i18n.getString( 'line_chart' ) , "'")',
+area_chart:   '$encoder.jsEscape($i18n.getString( 'line_chart' ) , "'")',
+pie_chart:   '$encoder.jsEscape($i18n.getString( 'pie_chart' ) , "'")',
+series: '$encoder.jsEscape($i18n.getString( 'series' ) , "'")' ,
+category:'$encoder.jsEscape($i18n.getString( 'category' ) , "'")',
+filter:'$encoder.jsEscape($i18n.getString( 'filter' ) , "'")',
+alert_no_indicators_selected:'$encoder.jsEscape($i18n.getString( 'alert_no_indicators_selected' ) , "'")',
+no_periods_selected:'$encoder.jsEscape($i18n.getString( 'no_periods_selected' ) , "'")',
+no_orgunits_selected:'$encoder.jsEscape($i18n.getString( 'no_orgunits_selected' ) , "'")',
+example_chart:'$encoder.jsEscape($i18n.getString( 'example_chart' ) , "'")',
+loading:'$encoder.jsEscape($i18n.getString( 'loading' ) , "'")',
+no_data:'$encoder.jsEscape($i18n.getString( 'no_data' ) , "'")',
+value:'$encoder.jsEscape($i18n.getString( 'value' ) , "'")',
+indicators:'$encoder.jsEscape($i18n.getString( 'indicators' ) , "'")',
+select_group:'$encoder.jsEscape($i18n.getString( 'select_group' ) , "'")',
+data_elements:'$encoder.jsEscape($i18n.getString( 'data_elements' ) , "'")',
+all_indicator_groups:'$encoder.jsEscape($i18n.getString( 'all_indicator_groups' ) , "'")',
+available_indicators:'$encoder.jsEscape($i18n.getString( 'available_indicators' ) , "'")',
+selected_indicators:'$encoder.jsEscape($i18n.getString( 'selected_indicators' ) , "'")',
+available_data_elements:'$encoder.jsEscape($i18n.getString( 'available_data_elements' ) , "'")',
+periods:'$encoder.jsEscape($i18n.getString( 'periods' ) , "'")',
+months:'$encoder.jsEscape($i18n.getString( 'months' ) , "'")',
+last_month:'$encoder.jsEscape($i18n.getString( 'last_month' ) , "'")',
+last_12_months:'$encoder.jsEscape($i18n.getString( 'last_12_months' ) , "'")',
+quarters:'$encoder.jsEscape($i18n.getString( 'quarters' ) , "'")',
+last_quarter:'$encoder.jsEscape($i18n.getString( 'last_quarter' ) , "'")',
+last_4_quarters:'$encoder.jsEscape($i18n.getString( 'last_4_quarters' ) , "'")',
+six_months:'$encoder.jsEscape($i18n.getString( 'six_months' ) , "'")',
+last_six_month:'$encoder.jsEscape($i18n.getString( 'last_six_month' ) , "'")',
+last_two_six_month:'$encoder.jsEscape($i18n.getString( 'last_two_six_month' ) , "'")',
+years:'$encoder.jsEscape($i18n.getString( 'years' ) , "'")',
+last_year:'$encoder.jsEscape($i18n.getString( 'last_year' ) , "'")',
+last_5_years:'$encoder.jsEscape($i18n.getString( 'last_5_years' ) , "'")',
+organisation_units:'$encoder.jsEscape($i18n.getString( 'organisation_units' ) , "'")',
+select_all_children:'$encoder.jsEscape($i18n.getString( 'select_all_children' ) , "'")',
+chart_options:'$encoder.jsEscape($i18n.getString( 'chart_options' ) , "'")',
+png_only:'$encoder.jsEscape($i18n.getString( 'png_only' ) , "'")',
+trend_line:'$encoder.jsEscape($i18n.getString( 'trend_line' ) , "'")',
+hide_subtitle:'$encoder.jsEscape($i18n.getString( 'hide_subtitle' ) , "'")',
+hide_legend:'$encoder.jsEscape($i18n.getString( 'hide_legend' ) , "'")',
+user_orgunit:'$encoder.jsEscape($i18n.getString( 'user_orgunit' ) , "'")',
+x_axis_label:'$encoder.jsEscape($i18n.getString( 'x_axis_label' ) , "'")',
+y_axis_label:'$encoder.jsEscape($i18n.getString( 'y_axis_label' ) , "'")',
+target_line_value:'$encoder.jsEscape($i18n.getString( 'target_line_value' ) , "'")',
+target_line_label:'$encoder.jsEscape($i18n.getString( 'target_line_label' ) , "'")',
+show_hide_chart_settings:'$encoder.jsEscape($i18n.getString( 'show_hide_chart_settings' ) , "'")',
+update:'$encoder.jsEscape($i18n.getString( 'update' ) , "'")',
+data_table:'$encoder.jsEscape($i18n.getString( 'data_table' ) , "'")',
+favorites:'$encoder.jsEscape($i18n.getString( 'favorites' ) , "'")',
+manage_favorites:'$encoder.jsEscape($i18n.getString( 'manage_favorites' ) , "'")',
+sort_by:'$encoder.jsEscape($i18n.getString( 'sort_by' ) , "'")',
+system:'$encoder.jsEscape($i18n.getString( 'system' ) , "'")',
+name:'$encoder.jsEscape($i18n.getString( 'name' ) , "'")',
+last_updated:'$encoder.jsEscape($i18n.getString( 'last_updated' ) , "'")',
+rename:'$encoder.jsEscape($i18n.getString( 'rename' ) , "'")',
+rename_favorite:'$encoder.jsEscape($i18n.getString( 'rename_favorite' ) , "'")',
+cancel:'$encoder.jsEscape($i18n.getString( 'cancel' ) , "'")',
+name_already_in_use:'$encoder.jsEscape($i18n.getString( 'name_already_in_use' ) , "'")',
+delete:'$encoder.jsEscape($i18n.getString( 'delete' ) , "'")',
+delete_favorite:'$encoder.jsEscape($i18n.getString( 'delete_favorite' ) , "'")',
+are_you_sure:'$encoder.jsEscape($i18n.getString( 'are_you_sure' ) , "'")',
+save:'$encoder.jsEscape($i18n.getString( 'save' ) , "'")',
+example_chart_cannot_be_saved:'$encoder.jsEscape($i18n.getString( 'example_chart_cannot_be_saved' ) , "'")',
+overwrite:'$encoder.jsEscape($i18n.getString( 'overwrite' ) , "'")',
+download_as:'$encoder.jsEscape($i18n.getString( 'download_as' ) , "'")',
+browser_download_alert:'$encoder.jsEscape($i18n.getString( 'browser_download_alert' ) , "'")',
+no_svg_format:'$encoder.jsEscape($i18n.getString( 'no_svg_format' ) , "'")',
+image_png:'$encoder.jsEscape($i18n.getString( 'image_png' ) , "'")',
+hide_data_table:'$encoder.jsEscape($i18n.getString( 'hide_data_table' ) , "'")',
+data_elemenent_store_does_not_exist:'$encoder.jsEscape($i18n.getString( 'data_elemenent_store_does_not_exist' ) , "'")',
+saving:'$encoder.jsEscape($i18n.getString( 'saving' ) , "'")',
+renaming:'$encoder.jsEscape($i18n.getString( 'renaming' ) , "'")',
+Deleting:'$encoder.jsEscape($i18n.getString( 'Deleting' ) , "'")'
+
+
+
+};
\ No newline at end of file