Updated Branches:
  refs/heads/master f87eed5b7 -> 8f34dc192

UI plugin framework: Support plugin internationalization

Allows UI plugins to contribute their own internationalized strings to
the global js dictionary. Each plugin would define a dictionary.js and
several dictionary_<locale>.js files. As each plugin is loaded, the
appropriate plugin dictionary is loaded into the global js
dictionary (with the global dictionary taking precedence in the event
of a conflict).

Original author: Chris Suich <[email protected]>
Reviewed by: Brian Federle <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/cd056f45
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/cd056f45
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/cd056f45

Branch: refs/heads/master
Commit: cd056f4572130edb8edc315e626c6fab718730c5
Parents: f87eed5
Author: Brian Federle <[email protected]>
Authored: Tue Aug 13 15:14:53 2013 -0700
Committer: Brian Federle <[email protected]>
Committed: Tue Aug 13 15:32:08 2013 -0700

----------------------------------------------------------------------
 ui/scripts/plugins.js | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/cd056f45/ui/scripts/plugins.js
----------------------------------------------------------------------
diff --git a/ui/scripts/plugins.js b/ui/scripts/plugins.js
index 96ed229..50da509 100644
--- a/ui/scripts/plugins.js
+++ b/ui/scripts/plugins.js
@@ -84,6 +84,13 @@
                     var css = basePath + id + '.css';
                     var configJS = type == 'plugins' ? basePath + 'config' : 
null;
 
+                    var pluginDictionary;
+                    var locale;
+                    if (type == 'plugins') {
+                        pluginDictionary = basePath + 'dictionary';
+                        locale = $.cookie('lang');
+                    }
+
                     if (configJS) {
                         // Load config metadata
                         require([configJS]);
@@ -100,6 +107,29 @@
                         })
                     );
 
+                    if (pluginDictionary) {
+                        // Callback for extending the dictionary with new 
entries
+                        var addToDictionary = function() {
+                            var additions = cloudStack[type][id].dictionary;
+                            $.extend(dictionary, additions);
+                        };
+
+                        // Only add a suffix if the locale is defined and not 
english/US
+                        var suffix = '';
+                        if (locale && (locale != '' && locale != 'en' & locale 
!= 'en_US'))
+                            suffix = '_'+locale;
+
+                        // Attempt to load the locale's dictionary
+                        require([pluginDictionary+suffix], addToDictionary, 
function() {
+                            // If the load failed and there was no suffix, 
don't try again
+                            if (!suffix)
+                                return;
+
+                            // Otherwise try to load the default dictionary
+                            require([pluginDictionary], addToDictionary);
+                        });
+                    }
+
                     loadedPlugins = loadedPlugins + 1;
 
                     if (loadedPlugins === pluginTotal) {

Reply via email to