From d62d57ece67ddf87adcb59000174e0e3f0a02ba4 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Tue, 22 Nov 2011 12:08:14 +0100 Subject: [PATCH 01/15] Do not SHA1-hash passwords when creating or passwd-ing users in Sunstone. One Core takes care of it now. --- src/sunstone/models/OpenNebulaJSON/UserJSON.rb | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/sunstone/models/OpenNebulaJSON/UserJSON.rb b/src/sunstone/models/OpenNebulaJSON/UserJSON.rb index 0fe15fdcc5..726845d23c 100644 --- a/src/sunstone/models/OpenNebulaJSON/UserJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/UserJSON.rb @@ -26,9 +26,9 @@ module OpenNebulaJSON return user_hash end - password = Digest::SHA1.hexdigest(user_hash['password']) - - self.allocate(user_hash['name'], password, user_hash['auth_driver']) + self.allocate(user_hash['name'], + user_hash['password'], + user_hash['auth_driver']) end def perform_action(template_json) @@ -40,7 +40,7 @@ module OpenNebulaJSON rc = case action_hash['perform'] when "passwd" then self.passwd(action_hash['params']) when "chgrp" then self.chgrp(action_hash['params']) - when "chauth" then self.chauth(action_hash['params']) + when "chauth" then self.chauth(action_hash['params']) when "update" then self.update(action_hash['params']) when "addgroup" then self.addgroup(action_hash['params']) when "delgroup" then self.delgroup(action_hash['params']) @@ -52,8 +52,7 @@ module OpenNebulaJSON end def passwd(params=Hash.new) - password = Digest::SHA1.hexdigest(params['password']) - super(password) + super(params['password']) end def chgrp(params=Hash.new) From 33d157cc7ff9f0175bcd744a194d86bf0b530b12 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Mon, 28 Nov 2011 20:50:01 +0100 Subject: [PATCH 02/15] oZones: small fixes Improve the regexp matching zone endpoint urls for the vdc information to display sunstone and onexml_rpc variable addresses. Enlarge the hosts boxes when creating an VDC. Set variable dialog height. --- .../Server/public/js/plugins/vdcs-tab.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ozones/Server/public/js/plugins/vdcs-tab.js b/src/ozones/Server/public/js/plugins/vdcs-tab.js index 06ae83e6d5..3f15e02315 100644 --- a/src/ozones/Server/public/js/plugins/vdcs-tab.js +++ b/src/ozones/Server/public/js/plugins/vdcs-tab.js @@ -51,12 +51,12 @@ var create_vdc_tmpl = \
Allows hosts belonging to other VDCs to be re-added to this one. They will appear greyed-out in the lists.
\
\ - \ - \ + \ + \ \ -
\ -
    \ -
      \ +
      \ +
        \ +
          \
          \ \
          \ @@ -278,7 +278,7 @@ function updateVDCInfo(req,vdc_json){ var zone_host = ""; var zone_port = ""; var sun_link = ""; - var zone_match = zone_endpoint.match(/^http:\/\/(\w+):(\d+)\/RPC2$/); + var zone_match = zone_endpoint.match(/^https?:\/\/([\w.]+):(\d+)\/([\W\w]+)$/); if (zone_match){ zone_host = zone_match[1]; @@ -428,10 +428,14 @@ function setupCreateVDCDialog(){ $('div#dialogs').append('
          '); var dialog = $('div#create_vdc_dialog'); dialog.html(create_vdc_tmpl); + + var height = Math.floor($(window).height()*0.8); + dialog.dialog({ autoOpen: false, modal: true, - width: 420 + height: height, + width: 500 }); $('button',dialog).button(); From 0204a013fdc7fc5fd02982250a26d4d808ad4562 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 30 Nov 2011 11:41:03 +0100 Subject: [PATCH 03/15] OZones GUI: Style fixes after vendor update --- src/ozones/Server/public/css/application.css | 17 ++++++++++- src/ozones/Server/public/css/layout.css | 30 ++++++++----------- .../Server/public/js/plugins/vdcs-tab.js | 7 +++-- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/ozones/Server/public/css/application.css b/src/ozones/Server/public/css/application.css index c99f7b641e..1ecaeec46d 100644 --- a/src/ozones/Server/public/css/application.css +++ b/src/ozones/Server/public/css/application.css @@ -215,6 +215,12 @@ label{ text-align:left; } +.dataTables_wrapper label { + float: none; + width: auto; + padding: 0 0; + text-align:right; +} div.tip { display: inline-block; @@ -411,7 +417,7 @@ tr.even:hover{ } .top_button { - font-size: 0.8em; + font-size: 0.8em!important; height: 25px; margin: 3px 2px; vertical-align: middle; @@ -578,4 +584,13 @@ ul.dd_right{ } ul.dd_left{ +} + +.ui-widget{ + font: 10pt Arial, Verdana, Geneva, Helvetica, sans-serif; +} + +.ui-layout-resizer-open-hover, /* hover-color to 'resize' */ +.ui-layout-resizer-dragging { + background: #EEE; } \ No newline at end of file diff --git a/src/ozones/Server/public/css/layout.css b/src/ozones/Server/public/css/layout.css index e4d6e2864a..b61f0b6ea6 100644 --- a/src/ozones/Server/public/css/layout.css +++ b/src/ozones/Server/public/css/layout.css @@ -44,19 +44,26 @@ body { } #header { - padding:0; + padding: 0 10px 0 10px; background-color: #353735; + border:0; } #footer { - padding:0; + padding-top: 9px; + font-size: 0.8em; + color: white; + text-align: center; background-color: #353735; + border:0; + } -#header { - padding: 0 10px 0 10px; - background-color: #353735; +#footer a { + color: white; + text-decoration: underline; } + #logo { padding-top: 6px; font-weight: bold; @@ -87,18 +94,6 @@ body { color: #88C140; } -#footer { - padding-top: 9px; - font-size: 0.8em; - color: white; - text-align: center; -} - -#footer a { - color: white; - text-decoration: underline; -} - #logo-wrapper { float: right; margin-top: 0px; @@ -108,6 +103,7 @@ body { #menu { padding-right: 0; padding-left: 0; + border:0; border-right: 1px solid #353735; background-image: -webkit-gradient( linear, diff --git a/src/ozones/Server/public/js/plugins/vdcs-tab.js b/src/ozones/Server/public/js/plugins/vdcs-tab.js index 3f15e02315..d46b8edacd 100644 --- a/src/ozones/Server/public/js/plugins/vdcs-tab.js +++ b/src/ozones/Server/public/js/plugins/vdcs-tab.js @@ -42,7 +42,7 @@ var create_vdc_tmpl = \
          \ \ - \ +
          \ \
          \ @@ -52,7 +52,8 @@ var create_vdc_tmpl =
          Allows hosts belonging to other VDCs to be re-added to this one. They will appear greyed-out in the lists.
          \
          \ \ - \ +
          \ +
          \ \
          \
            \ @@ -278,7 +279,7 @@ function updateVDCInfo(req,vdc_json){ var zone_host = ""; var zone_port = ""; var sun_link = ""; - var zone_match = zone_endpoint.match(/^https?:\/\/([\w.]+):(\d+)\/([\W\w]+)$/); + var zone_match = zone_endpoint.match(/^https?:\/\/([\w.-]+):(\d+)\/([\W\w]+)$/); if (zone_match){ zone_host = zone_match[1]; From bd2d5b557c3b973652e8760447a958a576450b53 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Wed, 30 Nov 2011 16:09:03 +0100 Subject: [PATCH 04/15] Minor fixes to GUIs style. --- src/ozones/Server/public/css/application.css | 6 +++--- src/sunstone/public/css/application.css | 6 +++--- src/sunstone/public/js/sunstone.js | 6 ++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ozones/Server/public/css/application.css b/src/ozones/Server/public/css/application.css index 1ecaeec46d..e8212b067b 100644 --- a/src/ozones/Server/public/css/application.css +++ b/src/ozones/Server/public/css/application.css @@ -471,15 +471,15 @@ tr.even:hover{ font-size: 1.2em; } -.jGrowl-notification, .jGrowl-closer, .jGrowl-notify-submit { +.jGrowl-notification, .jGrowl-notify-submit { border: 2px #444444 solid; - background-color: #F3F3F3; + background-color: #F3F3F3!important; color: #666666; } .jGrowl-notify-error { border: 2px #660000 solid; - background-color: #F39999; + background-color: #F39999!important; color: #660000; } diff --git a/src/sunstone/public/css/application.css b/src/sunstone/public/css/application.css index 03dc2c0a14..612e9fd012 100644 --- a/src/sunstone/public/css/application.css +++ b/src/sunstone/public/css/application.css @@ -478,15 +478,15 @@ tr.even:hover{ font-size: 1.2em; } -.jGrowl-notification, .jGrowl-closer, .jGrowl-notify-submit { +.jGrowl-notification, .jGrowl-notify-submit { border: 2px #444444 solid; - background-color: #F3F3F3; + background-color: #F3F3F3!important; color: #666666; } .jGrowl-notify-error { border: 2px #660000 solid; - background-color: #F39999; + background-color: #F39999!important; color: #660000; } diff --git a/src/sunstone/public/js/sunstone.js b/src/sunstone/public/js/sunstone.js index 99bff73ac0..69ec72f0ed 100644 --- a/src/sunstone/public/js/sunstone.js +++ b/src/sunstone/public/js/sunstone.js @@ -686,6 +686,12 @@ function setupConfirmDialogs(){ var value = $(this).val(); var action = SunstoneCfg["actions"][value]; var param = $('select#confirm_select',context).val(); + + if (!param.length){ + notifyError("You must select a value"); + return false; + }; + if (!action) { notifyError("Action "+value+" not defined."); return false;}; switch (action.type){ case "multiple": //find the datatable From 4036e5d1ea24e6ea0e8743f9137733366b8f0c9b Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Thu, 1 Dec 2011 19:25:17 +0100 Subject: [PATCH 05/15] Feature #1004: Add internationalization support for Sunstone This commit enables internationalization support for the Sunstone interface. Language is chosen according to the variable LANG in user's template. This variable is automaticly set when users chooses a new language from the select field on top, so that it is preserved on future logins. If no LANG is set, language is chosen according to the :lang: variable of the configuration. Otherwise it defaults to English. Special thanks to ZAO VIVOSS i OI for contributing the initial patch for OpenNebula Sunstone 3.0 and the first translation: russian. The contents from this patch have been partially applied with the necessary corrections and improvements to the master branch, which was ahead on many aspects to the 3.0 release. --- install.sh | 19 +- src/sunstone/etc/sunstone-server.conf | 3 + .../models/OpenNebulaJSON/UserJSON.rb | 2 +- src/sunstone/public/css/layout.css | 12 + src/sunstone/public/js/locale.js | 48 + src/sunstone/public/js/plugins/acls-tab.js | 122 +- .../public/js/plugins/dashboard-tab.js | 52 +- .../public/js/plugins/dashboard-users-tab.js | 32 +- src/sunstone/public/js/plugins/groups-tab.js | 30 +- src/sunstone/public/js/plugins/hosts-tab.js | 124 +- src/sunstone/public/js/plugins/images-tab.js | 243 ++-- .../public/js/plugins/templates-tab.js | 529 ++++----- src/sunstone/public/js/plugins/users-tab.js | 82 +- src/sunstone/public/js/plugins/vms-tab.js | 212 ++-- src/sunstone/public/js/plugins/vnets-tab.js | 158 +-- src/sunstone/public/js/sunstone-util.js | 32 +- src/sunstone/public/js/sunstone.js | 20 +- src/sunstone/public/locale/ru/ru.js | 1036 +++++++++++++++++ .../public/locale/ru/ru_datatable.txt | 17 + src/sunstone/sunstone-server.rb | 22 +- src/sunstone/views/index.erb | 18 +- 21 files changed, 2007 insertions(+), 806 deletions(-) create mode 100644 src/sunstone/public/js/locale.js create mode 100644 src/sunstone/public/locale/ru/ru.js create mode 100644 src/sunstone/public/locale/ru/ru_datatable.txt diff --git a/install.sh b/install.sh index 6a9cccc32a..02c1626db8 100755 --- a/install.sh +++ b/install.sh @@ -247,6 +247,9 @@ SUNSTONE_DIRS="$SUNSTONE_LOCATION/models \ $SUNSTONE_LOCATION/public/js/plugins \ $SUNSTONE_LOCATION/public/js/user-plugins \ $SUNSTONE_LOCATION/public/css \ + $SUNSTONE_LOCATION/public/locale \ + $SUNSTONE_LOCATION/public/locale/en_US \ + $SUNSTONE_LOCATION/public/locale/ru \ $SUNSTONE_LOCATION/public/vendor \ $SUNSTONE_LOCATION/public/vendor/jQueryLayout \ $SUNSTONE_LOCATION/public/vendor/dataTables \ @@ -417,6 +420,8 @@ INSTALL_SUNSTONE_FILES=( SUNSTONE_PUBLIC_VENDOR_JQUERYLAYOUT:$SUNSTONE_LOCATION/public/vendor/jQueryLayout SUNSTONE_PUBLIC_VENDOR_FLOT:$SUNSTONE_LOCATION/public/vendor/flot SUNSTONE_PUBLIC_IMAGES_FILES:$SUNSTONE_LOCATION/public/images + SUNSTONE_PUBLIC_LOCALE_EN_US:$SUNSTONE_LOCATION/public/locale/en_US + SUNSTONE_PUBLIC_LOCALE_RU:$SUNSTONE_LOCATION/public/locale/ru ) INSTALL_SUNSTONE_ETC_FILES=( @@ -1001,7 +1006,8 @@ SUNSTONE_PUBLIC_JS_FILES="src/sunstone/public/js/layout.js \ src/sunstone/public/js/login.js \ src/sunstone/public/js/sunstone.js \ src/sunstone/public/js/sunstone-util.js \ - src/sunstone/public/js/opennebula.js" + src/sunstone/public/js/opennebula.js \ + src/sunstone/public/js/locale.js" SUNSTONE_PUBLIC_JS_PLUGINS_FILES="\ src/sunstone/public/js/plugins/dashboard-tab.js \ @@ -1082,6 +1088,14 @@ SUNSTONE_PUBLIC_IMAGES_FILES="src/sunstone/public/images/ajax-loader.gif \ src/sunstone/public/images/vnc_off.png \ src/sunstone/public/images/vnc_on.png" +SUNSTONE_PUBLIC_LOCALE_EN_US="" + +SUNSTONE_PUBLIC_LOCALE_RU=" +src/sunstone/public/locale/ru/ru.js \ +src/sunstone/public/locale/ru/ru_datatable.txt" + + + #----------------------------------------------------------------------------- # Ozones files #----------------------------------------------------------------------------- @@ -1141,7 +1155,8 @@ OZONES_PUBLIC_JS_FILES="src/ozones/Server/public/js/ozones.js \ src/ozones/Server/public/js/ozones-util.js \ src/sunstone/public/js/layout.js \ src/sunstone/public/js/sunstone.js \ - src/sunstone/public/js/sunstone-util.js" + src/sunstone/public/js/sunstone-util.js \ + src/sunstone/public/js/locale.js" OZONES_PUBLIC_CSS_FILES="src/ozones/Server/public/css/application.css \ src/ozones/Server/public/css/layout.css \ diff --git a/src/sunstone/etc/sunstone-server.conf b/src/sunstone/etc/sunstone-server.conf index 2311501782..4993e571d9 100644 --- a/src/sunstone/etc/sunstone-server.conf +++ b/src/sunstone/etc/sunstone-server.conf @@ -20,3 +20,6 @@ # VNC Configuration :vnc_proxy_base_port: 29876 :novnc_path: + +# Default language setting +:lang: en_US \ No newline at end of file diff --git a/src/sunstone/models/OpenNebulaJSON/UserJSON.rb b/src/sunstone/models/OpenNebulaJSON/UserJSON.rb index 726845d23c..a2d89476a4 100644 --- a/src/sunstone/models/OpenNebulaJSON/UserJSON.rb +++ b/src/sunstone/models/OpenNebulaJSON/UserJSON.rb @@ -64,7 +64,7 @@ module OpenNebulaJSON end def update(params=Hash.new) - super(params['raw_template']) + super(params['template_raw']) end def addgroup(params=Hash.new) diff --git a/src/sunstone/public/css/layout.css b/src/sunstone/public/css/layout.css index f5fbf16d98..63630c8911 100644 --- a/src/sunstone/public/css/layout.css +++ b/src/sunstone/public/css/layout.css @@ -169,3 +169,15 @@ background-image: -moz-linear-gradient( #navigation li:hover a, .navigation-active-li-a { color: #ffffff !important; } + +#language { + float:right; + margin-top:2px; + margin-right:25px; + width: 100px; +} + +#language select { + width: 100px; + height: 22px; +} diff --git a/src/sunstone/public/js/locale.js b/src/sunstone/public/js/locale.js new file mode 100644 index 0000000000..5aa681fe6c --- /dev/null +++ b/src/sunstone/public/js/locale.js @@ -0,0 +1,48 @@ +var lang="" +var locale = {}; +var datatable_lang = ""; + +function tr(str){ + var tmp = locale[str]; + if ( tmp == null || tmp == "" ) { + //console.debug("trans: "+str); + tmp = str; + } + return tmp; +}; + +function setLang(lang_str){ + $('
            Loading new language... please wait '+spinner+'
            ').dialog({ + draggable:false, + modal:true, + resizable:false, + buttons:{}, + width: 460, + minHeight: 50 + + }); + + var template = "LANG="+lang_str; + var obj = { + data: { + id: uid, + extra_param: template + }, + error: onError + }; + OpenNebula.User.update(obj); + $.post('config',JSON.stringify({lang:lang_str}),refreshLang); +}; + +function refreshLang(){ + window.location.href = "."; +}; + +$(document).ready(function(){ + if (lang) + $('#lang_sel option[value="'+lang+'"]').attr("selected","selected"); + $('#lang_sel').change(function(){ + setLang($(this).val()); + }); + +}); \ No newline at end of file diff --git a/src/sunstone/public/js/plugins/acls-tab.js b/src/sunstone/public/js/plugins/acls-tab.js index ad94ffd2b6..3dfd077b6d 100644 --- a/src/sunstone/public/js/plugins/acls-tab.js +++ b/src/sunstone/public/js/plugins/acls-tab.js @@ -25,12 +25,12 @@ var acls_tab_content = \ \ \ - \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ + \ \ \ \ @@ -42,48 +42,48 @@ var create_acl_tmpl = '\
            \
            \ - \ + \ \
            \ - \ - Hosts
            \ - Virtual Machines
            \ - Virtual Networks
            \ - Images
            \ - Templates
            \ - Users
            \ - Groups
            \ + \ + '+tr("Hosts")+'
            \ + '+tr("Virtual Machines")+'
            \ + '+tr("Virtual Networks")+'
            \ + '+tr("Images")+'
            \ + '+tr("Templates")+'
            \ + '+tr("Users")+'
            \ + '+tr("Groups")+'
            \
            \ - \ - All
            \ - Specific ID
            \ - Owned by group
            \ + \ + '+tr("All")+'
            \ + '+tr("Specific ID")+'
            \ + '+tr("Owned by group")+'
            \
            \ - \ + \ \
            \ - \ + \ \
            \ - \ - Create
            \ - Delete
            \ - Use
            \ - Manage
            \ - Get Information
            \ - Get Pool of resources
            \ - Get Pool of my/group\'s resources
            \ - Change owner
            \ - Deploy
            \ + \ + '+tr("Create")+'
            \ + '+tr("Delete")+'
            \ + '+tr("Use")+'
            \ + '+tr("Manage")+'
            \ + '+tr("Get Information")+'
            \ + '+tr("Get Pool of resources")+'
            \ + '+tr("Get Pool of my/group\'s resources")+'
            \ + '+tr("Change owner")+'
            \ + '+tr("Deploy")+'
            \
            \ - \ + \ \
            \
            \
            \
            \ - \ - \ + \ + \
            \
            \ '; @@ -143,21 +143,21 @@ var acl_actions = { var acl_buttons = { "Acl.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Acl.create_dialog" : { type: "create_dialog", - text: "+ New" + text: tr("+ New") }, "Acl.delete" : { type: "action", - text: "Delete" + text: tr("Delete") } } var acls_tab = { - title: "ACLs", + title: tr("ACLs"), content: acls_tab_content, buttons: acl_buttons } @@ -179,14 +179,14 @@ function aclElements(){ function parseUserAcl(user){ var user_str=""; if (user[0] == '*'){ - user_str = "All"; + user_str = tr("All"); } else { if (user[0] == '#'){ - user_str="User "; + user_str=tr("User")+" "; user_str+= getUserName(user.substring(1)); } else if (user[0] == '@'){ - user_str="Group "; + user_str=tr("Group "); user_str+= getGroupName(user.substring(1)); }; }; @@ -197,14 +197,14 @@ function parseUserAcl(user){ function parseResourceAcl(user){ var user_str=""; if (user[0] == '*'){ - user_str = "All"; + user_str = tr("All"); } else { if (user[0] == '#'){ - user_str="ID "; + user_str=tr("ID")+" "; user_str+= user.substring(1); } else if (user[0] == '@'){ - user_str="Group "; + user_str=tr("Group")+" "; user_str+= getGroupName(user.substring(1)); }; }; @@ -232,25 +232,25 @@ function parseAclString(string) { for (var i=0; i'); + dialogs_context.append('
            '); $create_acl_dialog = $('#create_acl_dialog',dialogs_context); var dialog = $create_acl_dialog; dialog.html(create_acl_tmpl); @@ -391,13 +391,13 @@ function setupCreateAclDialog(){ $('#create_acl_form',dialog).submit(function(){ var user = $('#applies',this).val(); if (!user.length) { - notifyError("Please specify to who this ACL applies"); + notifyError(tr("Please specify to who this ACL applies")); return false; }; var resources = $('.resource_cb:checked',this).length; if (!resources) { - notifyError("Please select at least one resource"); + notifyError(tr("Please select at least one resource")); return false; } @@ -406,7 +406,7 @@ function setupCreateAclDialog(){ case "res_id": var l=$('#res_id',this).val().length; if (!l){ - notifyError("Please provide a resource ID for the resource(s) in this rule"); + notifyError(tr("Please provide a resource ID for the resource(s) in this rule")); return false; } break; @@ -441,15 +441,15 @@ function popUpCreateAclDialog(){ var users = $(''); $('.empty_value',users).remove(); $('option',users).addClass("user"); - users.prepend(''); + users.prepend(''); var groups = $(''); $('.empty_value',groups).remove(); $('option',groups).addClass("group"); - groups.prepend(''); + groups.prepend(''); var dialog = $create_acl_dialog; - $('#applies',dialog).html(''+ + $('#applies',dialog).html(''+ users.html()+groups.html()); $('#belonging_to',dialog).html(groups_select); @@ -480,7 +480,11 @@ $(document).ready(function(){ { "bSortable": false, "aTargets": ["check"] }, { "sWidth": "60px", "aTargets": [0] }, { "sWidth": "35px", "aTargets": [1] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); dataTable_acls.fnClearTable(); addElement([ diff --git a/src/sunstone/public/js/plugins/dashboard-tab.js b/src/sunstone/public/js/plugins/dashboard-tab.js index 92a38ba49c..d573a6ca23 100644 --- a/src/sunstone/public/js/plugins/dashboard-tab.js +++ b/src/sunstone/public/js/plugins/dashboard-tab.js @@ -50,40 +50,40 @@ var dashboard_tab_content =
            \ \ \ @@ -118,19 +118,19 @@ var dashboard_tab_content = \
            AllIDApplies toAffected resourcesResource ID / Owned byAllowed operations'+tr("All")+''+tr("ID")+''+tr("Applies to")+''+tr("Affected resources")+''+tr("Resource ID / Owned by")+''+tr("Allowed operations")+'
            \
            \ -

            Summary of resources

            \ +

            ' + tr('Summary of resources') + '

            \
            \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \
            Hosts (total/active)' + tr('Hosts (total/active)') + '
            Groups' + tr('Groups') + '
            VM Templates (total/public)' + tr('VM Templates (total/public)') + '
            VM Instances (total/running/failed)' + tr('VM Instances')+' (' + tr('total') + '/' + tr('running') + '/' + tr('failed') + ')
            Virtual Networks (total/public)' + tr('Virtual Networks (total/public)') + '
            Images (total/public)' + tr('Images (total/public)') + '
            Users' + tr('Users')+'
            ACL Rules' + tr('ACL Rules') + '
            \ @@ -95,18 +95,18 @@ var dashboard_tab_content =
            \
            \ -

            Quickstart

            \ +

            ' + tr('Quickstart') + '

            \
            \
            \ - \ - Host
            \ - VM Instance
            \ - VM Template
            \ - Virtual Network
            \ - Image
            \ - User
            \ - Group
            \ - Acl
            \ + \ + ' + tr('Host') + '
            \ + ' + tr('VM Instance') + '
            \ + ' + tr('VM Template') + '
            \ + ' + tr('Virtual Network') + '
            \ + ' + tr('Image') + '
            \ + ' + tr('User') + '
            \ + ' + tr('Group') + '
            \ + ' + tr('Acl') + '
            \
            \
            \
            \
            \ -

            Historical monitoring information

            \ +

            ' + tr('Historical monitoring information') + '

            \
            \ \ - \ + \ \ \ - \ + \ \ \ - \ + \ \ \ - \ + \ \ \
            Hosts CPU
            ' + tr('Hosts CPU') + '
            '+spinner+'
            Hosts memory
            ' + tr('Hosts memory') + '
            '+spinner+'
            Total VM count
            ' + tr('Total VM count') + '
            '+spinner+'
            VM Network stats
            ' + tr('VM Network stats') + '
            '+spinner+'
            \ @@ -143,7 +143,7 @@ var dashboard_tab_content =
            '; var dashboard_tab = { - title: 'Dashboard', + title: tr('Dashboard'), content: dashboard_tab_content } @@ -163,7 +163,7 @@ function plot_global_graph(data,info){ for (var i=0; i\ \
            \ -

            Summary of resources

            \ +

            '+tr('Summary of resources')+'

            \
            \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \
            VM Templates (total/public)'+tr('VM Templates (total/public)')+'
            VM Instances (total/running/failed)'+tr('VM Instances')+' ('+tr('total')+'/'+tr('running')+'/'+tr('failed')+')
            Virtual Networks (total/public)'+tr('Virtual Networks (total/public)')+'
            Images (total/public)'+tr('Images (total/public)')+'
            \ @@ -79,14 +79,14 @@ var dashboard_tab_content = \ \
            \ -

            Quickstart

            \ +

            '+tr('Quickstart')+'

            \
            \
            \ \ - VM Template
            \ - VM Instance
            \ - Virtual Network
            \ - Image
            \ + '+tr('VM Template')+'
            \ + '+tr('VM Instance')+'
            \ + '+tr('Virtual Network')+'
            \ + '+tr('Image')+'
            \
            \
            \ \ @@ -98,19 +98,19 @@ var dashboard_tab_content = \ \
            \ -

            Historical monitoring information

            \ +

            '+tr('Historical monitoring information')+'

            \
            \ \ - \ + \ \ \ - \ + \ \ \ - \ + \ \ \ - \ + \ \ \
            Total VM count
            '+tr('Total VM count')+'
            '+spinner+'
            Total VM CPU
            '+tr('Total VM CPU')+'
            '+spinner+'
            Total VM Memory
            '+tr('Total VM Memory')+'
            '+spinner+'
            VM Network stats
            '+tr('VM Network stats')+'
            '+spinner+'
            \ @@ -123,7 +123,7 @@ var dashboard_tab_content = '; var dashboard_tab = { - title: 'Dashboard', + title: tr('Dashboard'), content: dashboard_tab_content } diff --git a/src/sunstone/public/js/plugins/groups-tab.js b/src/sunstone/public/js/plugins/groups-tab.js index 0f1b39a5c9..caea4ff5bb 100644 --- a/src/sunstone/public/js/plugins/groups-tab.js +++ b/src/sunstone/public/js/plugins/groups-tab.js @@ -25,10 +25,10 @@ var groups_tab_content = \ \ \ - \ - \ - \ - \ + \ + \ + \ + \ \ \ \ @@ -40,14 +40,14 @@ var create_group_tmpl = '\
            \
            \ - \ + \
            \
            \
            \
            \
            \ - \ - \ + \ + \
            \
            \ '; @@ -118,12 +118,12 @@ var group_actions = { var group_buttons = { "Group.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Group.create_dialog" : { type: "create_dialog", - text: "+ New Group" + text: tr("+ New Group") }, // "Group.chown" : { // type: "confirm_with_select", @@ -135,12 +135,12 @@ var group_buttons = { "Group.delete" : { type: "action", - text: "Delete" + text: tr("Delete") } }; var groups_tab = { - title: 'Groups', + title: tr("Groups"), content: groups_tab_content, buttons: group_buttons } @@ -228,7 +228,7 @@ function updateGroupsView(request, group_list){ //Prepares the dialog to create function setupCreateGroupDialog(){ - dialogs_context.append('
            '); + dialogs_context.append('
            '); $create_group_dialog = $('#create_group_dialog',dialogs_context); var dialog = $create_group_dialog; @@ -276,7 +276,11 @@ $(document).ready(function(){ { "bSortable": false, "aTargets": ["check"] }, { "sWidth": "60px", "aTargets": [0] }, { "sWidth": "35px", "aTargets": [1] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); dataTable_groups.fnClearTable(); diff --git a/src/sunstone/public/js/plugins/hosts-tab.js b/src/sunstone/public/js/plugins/hosts-tab.js index c54d9a78d9..98b3a07ea8 100644 --- a/src/sunstone/public/js/plugins/hosts-tab.js +++ b/src/sunstone/public/js/plugins/hosts-tab.js @@ -19,13 +19,13 @@ var HOST_HISTORY_LENGTH = 40; var host_graphs = [ { - title : "CPU Monitoring information", + title : tr("CPU Monitoring information"), monitor_resources : "cpu_usage,used_cpu,max_cpu", humanize_figures : false, history_length : HOST_HISTORY_LENGTH }, { - title: "Memory monitoring information", + title: tr("Memory monitoring information"), monitor_resources : "mem_usage,used_mem,max_mem", humanize_figures : true, history_length : HOST_HISTORY_LENGTH @@ -40,13 +40,13 @@ var hosts_tab_content =
            AllIDNameUsers'+tr("All")+''+tr("ID")+''+tr("Name")+''+tr("Users")+'
            \ \ \ - \ - \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ + \ + \ \ \ \ @@ -57,42 +57,42 @@ var hosts_tab_content = var create_host_tmpl = '
            \
            \ - Host parameters\ - \ + ' + tr('Host parameters') + '\ + \
            \ -

            Drivers

            \ +

            ' + tr('Drivers') + '

            \
            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \
            \
            \
            \ -
            \ -
            \ +
            \ +
            \
            \
            \
            '; @@ -233,7 +233,7 @@ var host_actions = { type: "single", call: OpenNebula.Host.update, callback: function() { - notifyMessage("Template updated correctly"); + notifyMessage(tr("Template updated correctly")); }, error: onError } @@ -242,51 +242,51 @@ var host_actions = { var host_buttons = { "Host.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Host.create_dialog" : { type: "create_dialog", - text: "+ New" + text: tr("+ New") }, "Host.update_dialog" : { type: "action", - text: "Update a template", + text: tr("Update a template"), alwaysActive: true }, "Host.enable" : { type: "action", - text: "Enable" + text: tr("Enable") }, "Host.disable" : { type: "action", - text: "Disable" + text: tr("Disable") }, "Host.delete" : { type: "action", - text: "Delete host" + text: tr("Delete host") } }; var host_info_panel = { "host_info_tab" : { - title: "Host information", + title: tr("Host information"), content:"" }, "host_template_tab" : { - title: "Host template", + title: tr("Host template"), content: "" }, "host_monitoring_tab": { - title: "Monitoring information", + title: tr("Monitoring information"), content: "" } }; var hosts_tab = { - title: 'Hosts', + title: tr('Hosts'), content: hosts_tab_content, buttons: host_buttons } @@ -420,62 +420,62 @@ function updateHostInfo(request,host){ //Information tab var info_tab = { - title : "Host information", + title : tr("Host information"), content : '
            AllIDNameRunning VMsCPU UseMemory useStatus' + tr('All') + '' + tr('id') + '' + tr('Name') + '' + tr('Running VMs') + '' + tr('CPU Use') + '' + tr('Memory use') + '' + tr('Status') + '
            \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ - \ + \ + \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \
            Host information - '+host_info.NAME+'
            ' + tr('Host information') + ' - '+host_info.NAME+'
            ID' + tr('id') + ''+host_info.ID+'
            State'+OpenNebula.Helper.resource_state("host",host_info.STATE)+'' + tr('State') + ''+tr(OpenNebula.Helper.resource_state("host",host_info.STATE))+'
            IM MAD' + tr('IM MAD') + ''+host_info.IM_MAD+'
            VM MAD' + tr('VM MAD') + ''+host_info.VM_MAD+'
            TM MAD' + tr('TM MAD') + ''+host_info.TM_MAD+'
            \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ @@ -484,16 +484,16 @@ function updateHostInfo(request,host){ //Template tab var template_tab = { - title : "Host template", + title : tr("Host template"), content : '
            Host shares
            ' + tr('Host shares') + '
            Max Mem' + tr('Max Mem') + ''+humanize_size(host_info.HOST_SHARE.MAX_MEM)+'
            Used Mem (real)' + tr('Used Mem (real)') + ''+humanize_size(host_info.HOST_SHARE.USED_MEM)+'
            Used Mem (allocated)' + tr('Used Mem (allocated)') + ''+humanize_size(host_info.HOST_SHARE.MAX_USAGE)+'
            Used CPU (real)' + tr('Used CPU (real)') + ''+host_info.HOST_SHARE.USED_CPU+'
            Used CPU (allocated)' + tr('Used CPU (allocated)') + ''+host_info.HOST_SHARE.CPU_USAGE+'
            Running VMs' + tr('Running VMs') + ''+host_info.HOST_SHARE.RUNNING_VMS+'
            \ - '+ + '+ prettyPrintJSON(host_info.TEMPLATE)+ '
            Host template
            ' + tr('Host template') + '
            ' } var monitor_tab = { - title: "Monitoring information", + title: tr("Monitoring information"), content : generateMonitoringDivs(host_graphs,"host_monitor_") } @@ -513,7 +513,7 @@ function updateHostInfo(request,host){ //Prepares the host creation dialog function setupCreateHostDialog(){ - dialogs_context.append('
            '); + dialogs_context.append('
            '); $create_host_dialog = $('div#create_host_dialog'); var dialog = $create_host_dialog; @@ -529,7 +529,7 @@ function setupCreateHostDialog(){ //Handle the form submission $('#create_host_form',dialog).submit(function(){ if (!($('#name',this).val().length)){ - notifyError("Host name missing!"); + notifyError(tr("Host name missing!")); return false; } var host_json = { @@ -596,7 +596,11 @@ $(document).ready(function(){ { "sWidth": "35px", "aTargets": [1] }, { "sWidth": "100px", "aTargets": [6] }, { "sWidth": "200px", "aTargets": [4,5] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); //preload it diff --git a/src/sunstone/public/js/plugins/images-tab.js b/src/sunstone/public/js/plugins/images-tab.js index d8fd88bac8..2ec58f4cd6 100644 --- a/src/sunstone/public/js/plugins/images-tab.js +++ b/src/sunstone/public/js/plugins/images-tab.js @@ -23,18 +23,18 @@ var images_tab_content = \ \ \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ \ \ \ @@ -44,114 +44,114 @@ var images_tab_content = var create_image_tmpl = '
            \ -
            • Wizard
            • \ -
            • Advanced mode
            • \ + \
              \
              \ -

              Fields marked with are mandatory
              \ +

              '+tr('Fields marked with')+' '+tr('are mandatory')+'
              \

              \
              \ - \ + \ \ -
              Name that the Image will get. Every image must have a unique name.
              \ +
              '+tr('Name that the Image will get. Every image must have a unique name.')+'
              \
              \
              \ - \ + \ \ -
              Human readable description of the image for other users.
              \ +
              '+tr('Human readable description of the image for other users.')+'
              \
              \
              \
              \
              \ - \ + \ \ -
              Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).
              \ +
              '+tr('Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).')+'
              \
              \
              \ - \ + \ \ -
              Public scope of the image
              \ +
              '+tr('Public scope of the image')+'
              \
              \
              \ - \ + \ \ -
              Persistence of the image
              \ +
              '+tr('Persistence of the image')+'
              \
              \
              \ - \ + \ \ -
              Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).
              \ +
              '+tr('Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).')+'
              \
              \
              \ - \ + \ \ -
              Type of disk device to emulate.
              \ +
              '+tr('Type of disk device to emulate.')+'
              \
              \
              \ - \ + \ \ -
              Specific image mapping driver. KVM: raw, qcow2 and Xen:tap:aio:, file:
              \ +
              '+tr('Specific image mapping driver. KVM: raw, qcow2. XEN: tap:aio, file:')+'
              \
              \
              \
              \
              \ - \ + \ \ -
              \ +
              \ \ -
              \ +
              \ \ - \ -
              Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.

              \ + \ +
              '+tr('Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.')+'

              \
              \
              \ - \ + \ \ -
              Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.
              \ +
              '+tr('Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.')+'
              \
              \
              \ - \ + \ \ -
              Source to be used in the DISK attribute. Useful for not file-based images.
              \ +
              '+tr('Source to be used in the DISK attribute. Useful for not file-based images.')+'
              \
              \
              \ - \ + \ \ -
              Size of the datablock in MB.
              \ +
              '+tr('Size of the datablock in MB.')+'
              \
              \
              \ - \ + \ \ -
              Type of file system to be built. This can be any value understood by mkfs unix command.
              \ +
              '+tr('Type of file system to be built. This can be any value understood by mkfs unix command.')+'
              \
              \
              \
              \
              \ - \ + \ \ - \ + \ \ - \ - \ + \ + \
              \ - \ + \ \
              \
              \
              \
              \ - \ - \ + \ + \
              \
              \ \ @@ -159,16 +159,16 @@ var create_image_tmpl =
              \
              \
              \ -

              Write the image template here

              \ +

              '+tr('Write the image template here')+'

              \ \
              \
              \
              \ \ - \ + \
              \
              \ \ @@ -177,27 +177,26 @@ var create_image_tmpl = var update_image_tmpl = '
              \ -

              Please, choose and modify the image you want to update:

              \ +

              '+tr('Please, choose and modify the image you want to update')+':

              \
              \ - \ + \ \
              \
              \ - \ + \ \
              \
              \ - \ + \ \
              \ - \ + \
              \ \
              \
              \
              \ - \
              \
              \ @@ -277,7 +276,7 @@ var image_actions = { type: "single", call: OpenNebula.Image.update, callback: function() { - notifyMessage("Template updated correctly"); + notifyMessage(tr("Template updated correctly")); }, error: onError }, @@ -396,30 +395,30 @@ var image_actions = { var image_buttons = { "Image.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Image.create_dialog" : { type: "create_dialog", - text: "+ New" + text: tr('+ New') }, "Image.update_dialog" : { type: "action", - text: "Update a template", + text: tr("Update a template"), alwaysActive: true }, "Image.chown" : { type: "confirm_with_select", - text: "Change owner", + text: tr("Change owner"), select: users_sel, - tip: "Select the new owner:", + tip: tr("Select the new owner:"), condition: mustBeAdmin }, "Image.chgrp" : { type: "confirm_with_select", - text: "Change group", + text: tr("Change group"), select: groups_sel, - tip: "Select the new group:", + tip: tr("Select the new group:"), condition: mustBeAdmin }, "action_list" : { @@ -427,51 +426,51 @@ var image_buttons = { actions: { "Image.enable" : { type: "action", - text: "Enable" + text: tr("Enable") }, "Image.disable" : { type: "action", - text: "Disable" + text: tr("Disable") }, "Image.publish" : { type: "action", - text: "Publish" + text: tr("Publish") }, "Image.unpublish" : { type: "action", - text: "Unpublish" + text: tr("Unpublish") }, "Image.persistent" : { type: "action", - text: "Make persistent" + text: tr("Make persistent") }, "Image.nonpersistent" : { type: "action", - text: "Make non persistent" + text: tr("Make non persistent") } } }, "Image.delete" : { type: "action", - text: "Delete" + text: tr("Delete") } } var image_info_panel = { "image_info_tab" : { - title: "Image information", + title: tr("Image information"), content: "" }, "image_template_tab" : { - title: "Image template", + title: tr("Image template"), content: "" } } var images_tab = { - title: "Images", + title: tr("Images"), content: images_tab_content, buttons: image_buttons } @@ -492,13 +491,13 @@ function imageElementArray(image_json){ var image = image_json.IMAGE; var type = $(''); var value = OpenNebula.Helper.image_type(image.TYPE); - $('option[value="'+value+'"]',type).replaceWith(''); + $('option[value="'+value+'"]',type).replaceWith(''); @@ -570,75 +569,75 @@ function updateImagesView(request, images_list){ function updateImageInfo(request,img){ var img_info = img.IMAGE; var info_tab = { - title: "Image information", + title: tr("Image information"), content: '
            AllIDOwnerGroupNameSizeTypeRegistration timePublicPersistentStatus#VMS'+tr('All')+''+tr('ID')+''+tr('Owner')+''+tr('Group')+''+tr('Name')+''+tr('Size')+''+tr('Type')+''+tr('Registration time')+''+tr('Public')+''+tr('Persistent')+''+tr('Status')+''+tr('#VMS')+'
            \ \ - \ + \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ - \ + \ + \ \ \ - \ - \ + \ + \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \
            Image "'+img_info.NAME+'" information
            '+tr('Image')+' "'+img_info.NAME+'" '+tr('information')+'
            ID'+tr('ID')+''+img_info.ID+'
            Name'+tr('Name')+''+img_info.NAME+'
            Owner'+tr('Owner')+''+img_info.UNAME+'
            Group'+tr('Group')+''+img_info.GNAME+'
            Type'+tr('Type')+''+OpenNebula.Helper.image_type(img_info.TYPE)+'
            Register time'+tr('Register time')+''+pretty_time(img_info.REGTIME)+'
            Public'+(parseInt(img_info.PUBLIC) ? "yes" : "no")+''+tr('Public')+''+(parseInt(img_info.PUBLIC) ? tr("yes") : tr("no"))+'
            Persistent'+(parseInt(img_info.PERSISTENT) ? "yes" : "no")+''+tr('Persistent')+''+(parseInt(img_info.PERSISTENT) ? tr("yes") : tr("no"))+'
            Source'+tr('Source')+''+(typeof img_info.SOURCE === "string" ? img_info.SOURCE : "--")+'
            Path'+tr('Path')+''+(typeof img_info.PATH === "string" ? img_info.PATH : "--")+'
            Filesystem type'+tr('Filesystem type')+''+(typeof img_info.FSTYPE === "string" ? img_info.FSTYPE : "--")+'
            Size (Mb)'+tr('Size (Mb)')+''+img_info.SIZE+'
            State'+tr('State')+''+OpenNebula.Helper.resource_state("image",img_info.STATE)+'
            Running #VMS'+tr('Running #VMS')+''+img_info.RUNNING_VMS+'
            ' } var template_tab = { - title: "Image template", + title: tr("Image template"), content: '\ - '+ + '+ prettyPrintJSON(img_info.TEMPLATE)+ '
            Image template
            '+tr('Image template')+'
            ' } @@ -652,7 +651,7 @@ function updateImageInfo(request,img){ // Prepare the image creation dialog function setupCreateImageDialog(){ - dialogs_context.append('
            '); + dialogs_context.append('
            '); $create_image_dialog = $('#create_image_dialog',dialogs_context); var dialog = $create_image_dialog; dialog.html(create_image_tmpl); @@ -732,7 +731,7 @@ function setupCreateImageDialog(){ var name = $('#custom_var_image_name',$create_image_dialog).val(); var value = $('#custom_var_image_value',$create_image_dialog).val(); if (!name.length || !value.length) { - notifyError("Custom attribute name and value must be filled in"); + notifyError(tr("Custom attribute name and value must be filled in")); return false; } option= '' : ""; + var new_select= sel_elems.length > 1? '' : ""; $('option','').each(function(){ var val = $(this).val(); if ($.inArray(val,sel_elems) >= 0){ @@ -983,7 +982,7 @@ function setupImageActionCheckboxes(){ if (!is_persistent_image(id)) Sunstone.runAction("Image.publish",id); else { - notifyError("Image cannot be public and persistent"); + notifyError(tr("Image cannot be public and persistent")); return false; }; } else Sunstone.runAction("Image.unpublish",id); @@ -998,7 +997,7 @@ function setupImageActionCheckboxes(){ if (!is_public_image(id)) Sunstone.runAction("Image.persistent",id); else { - notifyError("Image cannot be public and persistent"); + notifyError(tr("Image cannot be public and persistent")); return false; }; } else Sunstone.runAction("Image.nonpersistent",id); @@ -1030,7 +1029,11 @@ $(document).ready(function(){ { "sWidth": "35px", "aTargets": [1,5,11] }, { "sWidth": "100px", "aTargets": [6] }, { "sWidth": "150px", "aTargets": [7] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); dataTable_images.fnClearTable(); @@ -1048,4 +1051,6 @@ $(document).ready(function(){ initCheckAllBoxes(dataTable_images); tableCheckboxesListener(dataTable_images); imageInfoListener(); + + }) diff --git a/src/sunstone/public/js/plugins/templates-tab.js b/src/sunstone/public/js/plugins/templates-tab.js index 18c185f64a..5a3c890a6c 100644 --- a/src/sunstone/public/js/plugins/templates-tab.js +++ b/src/sunstone/public/js/plugins/templates-tab.js @@ -23,13 +23,13 @@ var templates_tab_content = \ \ \ - \ - \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ + \ + \ \ \ \ @@ -39,10 +39,10 @@ var templates_tab_content = var create_template_tmpl = '
            \ \
            \ \ @@ -54,35 +54,35 @@ var create_template_tmpl = '
            \ XEN\
            \ -->\ -

            Fields marked with are mandatory
            \ - Fold / Unfold all sections

            \ +

            '+tr("Fields marked with")+''+tr("are mandatory")+'
            \ + '+tr("Fold / Unfold all sections")+'

            \
            \ \ \
            \
            \ -

            Capacity options

            \ +

            '+tr("Capacity options")+'

            \
            \ -
            Capacity\ +
            '+tr("Capacity")+'\
            \ - \ + \ \ -
            Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.
            \ +
            '+tr("Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.")+'
            \
            \
            \ - \ + \ \ -
            Amount of RAM required for the VM, in Megabytes.
            \ +
            '+tr("Amount of RAM required for the VM, in Megabytes.")+'
            \
            \
            \ - \ + \ \ -
            Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.
            \ +
            '+tr("Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.")+'
            \
            \
            \ - \ + \ \ -
            Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.
            \ +
            '+tr("Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.")+'
            \
            \
            \
            \ @@ -91,58 +91,58 @@ var create_template_tmpl = '
            \ -->\
            \
            \ -

            Boot/OS options

            \ +

            '+tr("Boot/OS options")+'

            \
            \ -
            OS and Boot options\ +
            '+tr("OS and Boot options")+'\
            \ - \ + \ \ -
            CPU architecture to virtualization
            \ +
            '+tr("CPU architecture to virtualization")+'
            \
            \ \
            \ - \ + \ \ -
            Select boot method
            \ +
            '+tr("Select boot method")+'
            \
            \
            \ - \ + \ \ -
            Path to the OS kernel to boot the image
            \ +
            '+tr("Path to the OS kernel to boot the image")+'
            \
            \
            \ - \ + \ \ -
            Path to the initrd image
            \ +
            '+tr("Path to the initrd image")+'
            \
            \
            \ - \ + \ \ -
            Device to be mounted as root
            \ +
            '+tr("Device to be mounted as root")+'
            \
            \
            \ - \ + \ \ -
            Arguments for the booting kernel
            \ +
            '+tr("Arguments for the booting kernel")+'
            \
            \
            \ - \ + \ \ -
            Path to the bootloader executable
            \ +
            '+tr("Path to the bootloader executable")+'
            \
            \
            \ - \ + \ \ -
            Boot device type
            \ +
            '+tr("Boot device type")+'
            \
            \
            \
            \ @@ -151,26 +151,26 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Features

            \ +

            '+tr("Features")+'

            \
            \ -
            Features\ +
            '+tr("Features")+'\
            \ - \ + \ \ -
            Physical address extension mode allows 32-bit guests to address more than 4 GB of memory
            \ +
            '+tr("Physical address extension mode allows 32-bit guests to address more than 4 GB of memory")+'
            \
            \
            \ - \ + \ \ -
            Useful for power management, for example, normally required for graceful shutdown to work
            \ +
            '+tr("Useful for power management, for example, normally required for graceful shutdown to work")+'
            \
            \
            \
            \ @@ -182,92 +182,92 @@ var create_template_tmpl = '
            \ readonly SEVERAL DISKS-->\
            \
            \ -

            Add disks/images

            \ -
            \ -
            Disks\ +

            '+tr('Add disks/images')+'

            \ +
            \ +
            '+tr('Disks')+'\
            \ - \ - Disk\ + \ + '+tr('Disk')+'\ \ - Image\ + '+tr('Image')+'\ \
            \
            \
            \ - \ + \ \ -
            Name of the image to use
            \ +
            '+tr('Name of the image to use')+'
            \ \
            \
            \ - \ + \ \ -
            Type of disk device to emulate: ide, scsi
            \ +
            '+tr('Type of disk device to emulate: ide, scsi')+'
            \
            \
            \ - \ + \ \ -
            Device to map image disk. If set, it will overwrite the default device mapping
            \ +
            '+tr('Device to map image disk. If set, it will overwrite the default device mapping')+'
            \
            \
            \ - \ + \ \ -
            Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported
            \ +
            '+tr('Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported')+'
            \
            \
            \ - \ + \ \ -
            Disk type
            \ +
            '+tr('Disk type')+'
            \
            \
            \ - \ + \ \ -
            Disk file location path or URL
            \ +
            '+tr('Disk file location path or URL')+'
            \
            \
            \ \ - \ + \ \ -
            Size in MB
            \ +
            '+tr('Size in MB')+'
            \
            \
            \ \ - \ + \ \ -
            Filesystem type for the fs images
            \ +
            '+tr('Filesystem type for the fs images')+'
            \
            \
            \ - \ + \ \ -
            Clone this image
            \ +
            '+tr('Clone this image')+'
            \
            \
            \ - \ + \ \ -
            Save this image after shutting down the VM
            \ +
            '+tr('Save this image after shutting down the VM')+'
            \
            \
            \ - \ + \ \ -
            Mount image as read-only
            \ +
            '+tr('Mount image as read-only')+'
            \
            \
            \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -279,107 +279,107 @@ var create_template_tmpl = '
            \ bridge, target, script, model -->\
            \
            \ -

            Setup Networks

            \ +

            '+tr('Setup Networks')+'

            \
            \ -
            Network\ +
            '+tr('Network')+'\
            \ - \ - Predefined\ + \ + '+tr('Predefined')+'\ \ - Manual\ + '+tr('Manual')+'\ \ \
            \
            \
            \ - \ + \ \ -
            Name of the network to attach this device
            \ +
            '+tr('Name of the network to attach this device')+'
            \ \
            \
            \ - \ + \ \ -
            Request an specific IP from the Network
            \ +
            '+tr('Request an specific IP from the Network')+'
            \
            \
            \ - \ + \ \ -
            HW address associated with the network interface
            \ +
            '+tr('HW address associated with the network interface')+'
            \
            \
            \ - \ + \ \ -
            Name of the bridge the network device is going to be attached to
            \ +
            '+tr('Name of the bridge the network device is going to be attached to')+'
            \
            \
            \ - \ + \ \ -
            Name for the tun device created for the VM
            \ +
            '+tr('Name for the tun device created for the VM')+'
            \
            \
            \ - \ + \ \ -
            Name of a shell script to be executed after creating the tun device for the VM
            \ +
            '+tr('Name of a shell script to be executed after creating the tun device for the VM')+'
            \
            \
            \ - \ + \ \ -
            Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.
            \ +
            '+tr('Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.')+'
            \
            \
            \ - \ + \ \
            \
            \
            \ - \ + \ \ -
            Permits access to the VM only through the specified ports in the TCP protocol
            \ +
            '+tr('Permits access to the VM only through the specified ports in the TCP protocol')+'
            \
            \
            \ - \ + \ \ -
            Disallow access to the VM through the specified ports in the TCP protocol
            \ +
            '+tr('Disallow access to the VM through the specified ports in the TCP protocol')+'
            \
            \
            \ - \ + \ \
            \
            \
            \ - \ + \ \ -
            Permits access to the VM only through the specified ports in the UDP protocol
            \ +
            '+tr('Permits access to the VM only through the specified ports in the UDP protocol')+'
            \
            \
            \ - \ + \ \ -
            Disallow access to the VM through the specified ports in the UDP protocol
            \ +
            '+tr('Disallow access to the VM through the specified ports in the UDP protocol')+'
            \
            \
            \ - \ + \ \ -
            ICMP policy
            \ +
            '+tr('ICMP policy')+'
            \
            \
            \
            \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -390,31 +390,31 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add inputs

            \ +

            '+tr("Add inputs")+'

            \
            \ -
            Inputs\ +
            '+tr("Inputs")+'\
            \ - \ + \ \
            \
            \
            \ - \ + \ \
            \
            \
            \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -425,37 +425,37 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add Graphics

            \ +

            '+tr("Add Graphics")+'

            \
            \ -
            Graphics\ +
            '+tr("Graphics")+'\
            \ - \ + \ \
            \
            \
            \ - \ + \ \ -
            IP to listen on
            \ +
            '+tr("IP to listen on")+'
            \
            \
            \ - \ + \ \ -
            Port for the VNC server
            \ +
            '+tr("Port for the VNC server")+'
            \
            \
            \ - \ + \ \ -
            Password for the VNC server
            \ +
            '+tr("Password for the VNC server")+'
            \
            \
            \ - \ + \ \ -
            Keyboard configuration locale to use in the VNC display
            \ +
            '+tr("Keyboard configuration locale to use in the VNC display")+'
            \
            \
            \
            \ @@ -464,24 +464,24 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add context variables

            \ +

            '+tr("Add context variables")+'

            \
            \ -
            Context\ +
            '+tr("Context")+'\
            \ - \ + \ \ -
            Name for the context variable
            \ +
            '+tr("Name for the context variable")+'
            \
            \
            \ - \ + \ \ -
            Value of the context variable
            \ +
            '+tr("Value of the context variable")+'
            \
            \
            \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -492,18 +492,18 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add placement options

            \ +

            '+tr("Add placement options")+'

            \
            \ -
            Placement\ +
            '+tr("Placement")+'\
            \ - \ + \ \ -
            Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM
            \ +
            '+tr("Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM")+'
            \
            \
            \ - \ + \ \ -
            This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others
            \ +
            '+tr("This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others")+'
            \
            \
            \
            \ @@ -512,15 +512,15 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add Hypervisor raw options

            \ +

            '+tr("Add Hypervisor raw options")+'

            \
            \ -
            Raw\ +
            '+tr("Raw")+'\ \
            \ - \ + \ \ \ -
            Raw data to be passed directly to the hypervisor
            \ +
            '+tr("Raw data to be passed directly to the hypervisor")+'
            \
            \
            \
            \ @@ -529,24 +529,24 @@ var create_template_tmpl = '
            \ \
            \
            \ -

            Add custom variables

            \ +

            '+tr('Add custom variables')+'

            \
            \ -
            Custom variables\ +
            '+tr('Custom variables')+'\
            \ - \ + \ \ -
            Name for the custom variable
            \ +
            '+tr('Name for the custom variable')+'
            \
            \
            \ - \ + \ \ -
            Value of the custom variable
            \ +
            '+tr('Value of the custom variable')+'
            \
            \
            \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -556,16 +556,16 @@ var create_template_tmpl = '
            \
            \
            \ \ - \ + \
            \
            \ \
            \
            \
            \ -

            Write the Virtual Machine template here

            \ +

            '+tr("Write the Virtual Machine template here")+'

            \
            \ \
            \ @@ -573,9 +573,9 @@ var create_template_tmpl = '
            \
            \
            \ \ - \ + \
            \
            \ \ @@ -584,16 +584,16 @@ var create_template_tmpl = '
            \ var update_template_tmpl = '
            \ -

            Please, choose and modify the template you want to update:

            \ +

            '+tr('Please, choose and modify the template you want to update')+':

            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \ - \ + \
            \ \
            \ @@ -606,7 +606,6 @@ var update_template_tmpl =
            \ '; -var templates_select = ""; var dataTable_templates; var $create_template_dialog; @@ -672,7 +671,7 @@ var template_actions = { type: "single", call: OpenNebula.Template.update, callback: function() { - notifyMessage("Template updated correctly"); + notifyMessage(tr("Template updated correctly")); }, error: onError }, @@ -751,34 +750,34 @@ var template_actions = { var template_buttons = { "Template.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Template.create_dialog" : { type: "create_dialog", - text: "+ New" + text: tr("+ New") }, "Template.update_dialog" : { type: "action", - text: "Update a template", + text: tr("Update a template"), alwaysActive: true }, "Template.instantiate_vms" : { type: "action", - text: "Instantiate" + text: tr("Instantiate") }, "Template.chown" : { type: "confirm_with_select", - text: "Change owner", + text: tr("Change owner"), select: users_sel, - tip: "Select the new owner:", + tip: tr("Select the new owner:"), condition: mustBeAdmin }, "Template.chgrp" : { type: "confirm_with_select", - text: "Change group", + text: tr("Change group"), select: groups_sel, - tip: "Select the new group:", + tip: tr("Select the new group:"), condition: mustBeAdmin }, "action_list" : { @@ -786,29 +785,29 @@ var template_buttons = { actions: { "Template.publish" : { type: "action", - text: "Publish" + text: tr("Publish") }, "Template.unpublish" : { type: "action", - text: "Unpublish" + text: tr("Unpublish") }, } }, "Template.delete" : { type: "action", - text: "Delete" + text: tr("Delete") } } var template_info_panel = { "template_info_tab" : { - title: "Template information", + title: tr("Template information"), content: "" } } var templates_tab = { - title: "Templates", + title: tr("Templates"), content: templates_tab_content, buttons: template_buttons } @@ -857,12 +856,12 @@ function templateInfoListener(){ //Updates the select input field with an option for each template function updateTemplateSelect(){ - templates_select = + var templates_select = makeSelectOptions(dataTable_templates, 1,//id_col 4,//name_col - [7],//enabled_col - ["no"]//bad status col + [],//status_cols + []//bad status values ); //update static selectors: @@ -908,42 +907,42 @@ function updateTemplatesView(request, templates_list){ function updateTemplateInfo(request,template){ var template_info = template.VMTEMPLATE; var info_tab = { - title: "Information", + title: tr("Information"), content: '
            AllIDOwnerGroupNameRegistration timePublic'+tr("All")+''+tr("ID")+''+tr("Owner")+''+tr("Group")+''+tr("Name")+''+tr("Registration time")+''+tr("Public")+'
            \ \ - \ + \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ - \ + \ + \ \
            Template "'+template_info.NAME+'" information
            '+tr("Template")+' \"'+template_info.NAME+'\" '+tr("information")+'
            ID'+tr("ID")+''+template_info.ID+'
            Name'+tr("Name")+''+template_info.NAME+'
            Owner'+tr("Owner")+''+template_info.UNAME+'
            Group'+tr("Group")+''+template_info.GNAME+'
            Register time'+tr("Register time")+''+pretty_time(template_info.REGTIME)+'
            Public'+(parseInt(template_info.PUBLIC) ? "yes" : "no")+''+tr("Public")+''+(parseInt(template_info.PUBLIC) ? tr("yes") : tr("no"))+'
            ' }; var template_tab = { - title: "Template", + title: tr("Template"), content: '\ - '+ + '+ prettyPrintJSON(template_info.TEMPLATE)+ '
            Template
            '+tr("Template")+'
            ' }; @@ -1043,30 +1042,30 @@ function setupCreateTemplateDialog(){ // * Show the inputs and graphics section var type_opts = - '\ - \ - \ - \ - \ - \ - '; + '\ + \ + \ + \ + \ + \ + '; $('select#TYPE',section_disks).html(type_opts); var boot_opts = - '\ - \ - \ - '; + '\ + \ + \ + '; $('select#BOOT',section_os_boot).html(boot_opts); $('select#BOOT',section_os_boot).parent().show(); - $('select#boot_method option#no_boot',section_os_boot).html("Driver default"); + $('select#boot_method option#no_boot',section_os_boot).html(tr("Driver default")); var bus_opts = - '\ - \ - '; + '\ + \ + '; $('select#BUS',section_disks).html(bus_opts); @@ -1091,20 +1090,20 @@ function setupCreateTemplateDialog(){ // * Show the graphics section var type_opts = - '\ - \ - \ - \ - \ - '; + '\ + \ + \ + \ + \ + '; $('select#TYPE',section_disks).html(type_opts); - $('select#boot_method option#no_boot',section_os_boot).html("Please choose"); + $('select#boot_method option#no_boot',section_os_boot).html(tr("Please choose")); var bus_opts = - '\ - '; + '\ + '; $('select#BUS',section_disks).html(bus_opts); @@ -1126,17 +1125,17 @@ function setupCreateTemplateDialog(){ // * Set the raw type to vmware var type_opts = - '\ - \ - '; + '\ + \ + '; $('select#TYPE',section_disks).html(type_opts); $('div#kernel_bootloader',section_os_boot).hide(); var bus_opts = - '\ - '; + '\ + '; $('select#BUS',section_disks).html(bus_opts); $('input#TYPE', section_raw).val("vmware"); @@ -1175,7 +1174,7 @@ function setupCreateTemplateDialog(){ //are fields passing the filter? var result = filter(); if (!result) { - notifyError("There are mandatory parameters missing in this section"); + notifyError(tr("There are mandatory parameters missing in this section")); return false; } @@ -1708,7 +1707,7 @@ function setupCreateTemplateDialog(){ var name = $('#var_name',section_context).val(); var value = $('#var_value',section_context).val(); if (!name.length || !value.length) { - notifyError("Context variable name and value must be filled in"); + notifyError(tr("Context variable name and value must be filled in")); return false; } option= '
            \ '); @@ -815,8 +815,8 @@ function setupSaveasDialog(){ var type = $('#image_type',this).val(); if (!id.length || !disk_id.length || !image_name.length) { - notifyError("Skipping VM "+id+ - ". No disk id or image name specified"); + notifyError(tr("Skipping VM ")+id+ + tr(". No disk id or image name specified")); } else { var obj = { @@ -853,25 +853,25 @@ function popUpSaveasDialog(elems){ var li = '
          • VM '+this+'
          • ' $('#saveas_tabs ul',dialog).append(li); var tab = '
            \ -
            Saveas for VM with ID '+this+'
            \ +
            '+tr('Saveas for VM with ID')+' '+this+'
            \
            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \
            \ @@ -891,15 +891,15 @@ function saveasDisksCallback(req,response){ var gen_option = function(id, name, source){ if (name){ - return ''; + return ''; } else { - return ''; + return ''; } } var disks = vm_info.TEMPLATE.DISK; - if (!disks) { select = '';} + if (!disks) { select = '';} else if (disks.constructor == Array) //several disks { for (var i=0;i
            '); + dialogs_context.append('
            '); $vnc_dialog = $('#vnc_dialog',dialogs_context); var dialog = $vnc_dialog; dialog.html('\
            \ \ - \ + \
            Loading
            '+tr("Loading")+'
            \ \ @@ -978,7 +978,7 @@ function setupVNC(){
            \
            \ \ - Canvas not supported.\ + '+tr("Canvas not supported.")+'\ \ '); @@ -1040,10 +1040,10 @@ function vncIcon(vm){ var gr_icon; if (graphics && graphics.TYPE == "vnc" && state == "RUNNING"){ gr_icon = ''; - gr_icon += 'Open VNC Session'; + gr_icon += '\"'+tr("Open'; } else { - gr_icon = 'VNC Disabled'; + gr_icon = '\"'+tr("VNC'; } return gr_icon; } @@ -1071,7 +1071,11 @@ $(document).ready(function(){ { "sWidth": "35px", "aTargets": [1,10] }, { "sWidth": "150px", "aTargets": [5,9] }, { "sWidth": "100px", "aTargets": [2,3] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); dataTable_vMachines.fnClearTable(); diff --git a/src/sunstone/public/js/plugins/vnets-tab.js b/src/sunstone/public/js/plugins/vnets-tab.js index e9b9dcfcfc..10ec08d2db 100644 --- a/src/sunstone/public/js/plugins/vnets-tab.js +++ b/src/sunstone/public/js/plugins/vnets-tab.js @@ -23,15 +23,15 @@ var vnets_tab_content = \ \ \ - \ - \ - \ - \ - \ - \ - \ - \ - \ + \ + \ + \ + \ + \ + \ + \ + \ + \ \ \ \ @@ -42,40 +42,40 @@ var vnets_tab_content = var create_vn_tmpl = '
            \ \
            \
            \
            \ - \ + \
            \
            \
            \ - \ + \
            \
            \
            \ - \ - Fixed network
            \ - Ranged network
            \ + \ + '+tr("Fixed network")+'
            \ + '+tr("Ranged network")+'
            \
            \
            \
            \
            \
            \ - \ + \
            \ - \ + \ \
            \ \ \ - \ + \
            \ @@ -83,9 +83,9 @@ var create_vn_tmpl =
            \
            \
            \ - \ + \
            \ - \ + \ \
            \
            \ @@ -94,14 +94,14 @@ var create_vn_tmpl = \
            \
            \ - \ + \ \ - \ + \ \ - \ - \ + \ + \
            \ - \ + \ \
            \ @@ -109,16 +109,16 @@ var create_vn_tmpl =
            \
            \ \ - \ + \
            \
            \ \
            \
            \
            \ -

            Write the Virtual Network template here

            \ +

            '+tr("Write the Virtual Network template here")+'

            \
            \ \
            \ @@ -126,9 +126,9 @@ var create_vn_tmpl =
            \
            \ \ - \ + \
            \
            \ \ @@ -137,23 +137,23 @@ var create_vn_tmpl = var update_vnet_tmpl = '
            \ -

            Please, choose and modify the virtual network you want to update:

            \ +

            '+tr('Please, choose and modify the virtual network you want to update')+':

            \
            \ - \ + \ \
            \
            \ - \ + \ \
            \ - \ + \
            \ \
            \
            \
            \ \
            \
            \ @@ -328,36 +328,36 @@ var vnet_actions = { var vnet_buttons = { "Network.refresh" : { type: "image", - text: "Refresh list", + text: tr("Refresh list"), img: "images/Refresh-icon.png" }, "Network.create_dialog" : { type: "create_dialog", - text: "+ New" + text: tr("+ New") }, "Network.update_dialog" : { type: "action", - text: "Update a template", + text: tr("Update a template"), alwaysActive: true }, "Network.publish" : { type: "action", - text: "Publish" + text: tr("Publish") }, "Network.unpublish" : { type: "action", - text: "Unpublish" + text: tr("Unpublish") }, "Network.chown" : { type: "confirm_with_select", - text: "Change owner", + text: tr("Change owner"), select: users_sel, - tip: "Select the new owner:", + tip: tr("Select the new owner")+":", condition: mustBeAdmin }, @@ -365,7 +365,7 @@ var vnet_buttons = { type: "confirm_with_select", text: "Change group", select: groups_sel, - tip: "Select the new group:", + tip: tr("Select the new group")+":", condition: mustBeAdmin, }, @@ -374,34 +374,34 @@ var vnet_buttons = { actions: { "Network.addleases_dialog" : { type: "action", - text: "Add lease" + text: tr("Add lease") }, "Network.rmleases_dialog" : { type: "action", - text: "Remove lease" + text: tr("Remove lease") } } }, "Network.delete" : { type: "action", - text: "Delete" + text: tr("Delete") } } var vnet_info_panel = { "vnet_info_tab" : { - title: "Virtual network information", + title: tr("Virtual network information"), content: "" }, "vnet_template_tab" : { - title: "Virtual network template", + title: tr("Virtual network template"), content: "" } } var vnets_tab = { - title: "Virtual Networks", + title: tr("Virtual Networks"), content: vnets_tab_content, buttons: vnet_buttons } @@ -488,32 +488,32 @@ function updateVNetworkInfo(request,vn){ var info_tab_content = '
            AllIDOwnerGroupNameTypeBridgePublicTotal Leases'+tr("All")+''+tr("ID")+''+tr("Owner")+''+tr("Group")+''+tr("Name")+''+tr("Type")+''+tr("Bridge")+''+tr("Public")+''+tr("Total Leases")+'
            \ \ - \ + \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \ \ - \ + \ \ \
            Virtual Network '+vn_info.ID+' information
            '+tr('Virtual Network')+' '+vn_info.ID+' '+tr('information')+'
            ID'+tr('ID')+''+vn_info.ID+'
            Owner'+tr('Owner')+''+vn_info.UNAME+'
            Group'+tr('Group')+''+vn_info.GNAME+'
            Public'+tr('Public')+''+(parseInt(vn_info.PUBLIC) ? "yes" : "no" )+'
            Physical device'+tr('Physical device')+''+(vn_info.PHYDEV ? vn_info.PHYDEV : "--" )+'
            \ \ \ - \ + \ '+ printLeases(vn_info.LEASES)+ '
            Leases information
            '+tr('Leases information')+'
            ';; @@ -521,15 +521,15 @@ function updateVNetworkInfo(request,vn){ var info_tab = { - title: "Virtual Network information", + title: tr("Virtual Network information"), content: info_tab_content } var template_tab = { - title: "Virtual Network template", + title: tr("Virtual Network template"), content: '\ - '+ + '+ prettyPrintJSON(vn_info.TEMPLATE)+ '
            Virtual Network template
            '+tr("Virtual Network template")+'
            ' } @@ -558,7 +558,7 @@ function printLeases(leases){ //Prepares the vnet creation dialog function setupCreateVNetDialog() { - dialogs_context.append('
            '); + dialogs_context.append('
            '); $create_vn_dialog = $('#create_vn_dialog',dialogs_context) var dialog = $create_vn_dialog; dialog.html(create_vn_tmpl); @@ -597,7 +597,7 @@ function setupCreateVNetDialog() { //We don't add anything to the list if there is nothing to add if (lease_ip == null) { - notifyError("Please provide a lease IP"); + notifyError(tr("Please provide a lease IP")); return false; }; @@ -652,7 +652,7 @@ function setupCreateVNetDialog() { //Fetch values var name = $('#name',this).val(); if (!name.length){ - notifyError("Virtual Network name missing!"); + notifyError(tr("Virtual Network name missing!")); return false; } var bridge = $('#bridge',this).val(); @@ -683,7 +683,7 @@ function setupCreateVNetDialog() { var network_addr = $('#net_address',this).val(); var network_size = $('#net_size',this).val(); if (!network_addr.length){ - notifyError("Please provide a network address"); + notifyError(tr("Please provide a network address")); return false; }; @@ -728,7 +728,7 @@ function popUpCreateVnetDialog() { function setupVNetTemplateUpdateDialog(){ //Append to DOM - dialogs_context.append('
            '); + dialogs_context.append('
            '); var dialog = $('#vnet_template_update_dialog',dialogs_context); //Put HTML in place @@ -749,7 +749,7 @@ function setupVNetTemplateUpdateDialog(){ var id = $(this).val(); if (id && id.length){ var dialog = $('#vnet_template_update_dialog'); - $('#vnet_template_update_textarea',dialog).val("Loading..."); + $('#vnet_template_update_textarea',dialog).val(tr("Loading")+"..."); var vnet_public = is_public_vnet(id); @@ -827,7 +827,7 @@ function popUpVNetTemplateUpdateDialog(){ } function setupAddRemoveLeaseDialog() { - dialogs_context.append('
            '); + dialogs_context.append('
            '); $lease_vn_dialog = $('#lease_vn_dialog',dialogs_context) var dialog = $lease_vn_dialog; @@ -835,17 +835,17 @@ function setupAddRemoveLeaseDialog() { dialog.html( '\
            \ -
            Please specify:
            \ - \ +
            '+tr("Please specify:")+'
            \ + \
            \ - \ + \ \ \
            \
            \
            \ - \ - \ + \ + \
            \
            \ ' @@ -878,7 +878,7 @@ function setupAddRemoveLeaseDialog() { } function popUpAddLeaseDialog() { - $lease_vn_dialog.dialog("option","title","Add lease"); + $lease_vn_dialog.dialog("option","title",tr("Add lease")); $('#add_lease_mac',$lease_vn_dialog).show(); $('#add_lease_mac_label',$lease_vn_dialog).show(); $('#lease_vn_proceed',$lease_vn_dialog).val("Network.addleases"); @@ -886,7 +886,7 @@ function popUpAddLeaseDialog() { } function popUpRemoveLeaseDialog() { - $lease_vn_dialog.dialog("option","title","Remove lease"); + $lease_vn_dialog.dialog("option","title",tr("Remove lease")); $('#add_lease_mac',$lease_vn_dialog).hide(); $('#add_lease_mac_label',$lease_vn_dialog).hide(); $('#lease_vn_proceed',$lease_vn_dialog).val("Network.rmleases"); @@ -935,7 +935,11 @@ $(document).ready(function(){ { "sWidth": "60px", "aTargets": [0,5,6,7,8] }, { "sWidth": "35px", "aTargets": [1] }, { "sWidth": "100px", "aTargets": [2,3] } - ] + ], + "oLanguage": (datatable_lang != "") ? + { + sUrl: "locale/"+lang+"/"+datatable_lang + } : "" }); dataTable_vNetworks.fnClearTable(); diff --git a/src/sunstone/public/js/sunstone-util.js b/src/sunstone/public/js/sunstone-util.js index ee19881d77..f58320722f 100644 --- a/src/sunstone/public/js/sunstone-util.js +++ b/src/sunstone/public/js/sunstone-util.js @@ -186,10 +186,12 @@ function stringJSON(json){ function notifySubmit(action, args, extra_param){ var action_text = action.replace(/OpenNebula\./,'').replace(/\./,' '); - var msg = "

            Submitted

            "; + var msg = '

            '+tr("Submitted")+'

            '; if (!args || (typeof args == 'object' && args.constructor != Array)){ + msg += action_text; } else { + msg += action_text + ": " + args; }; if (extra_param && extra_param.constructor != Object) { @@ -201,13 +203,13 @@ function notifySubmit(action, args, extra_param){ //Notification on error function notifyError(msg){ - msg = "

            Error

            " + msg; + msg = "

            "+tr("Error")+"

            " + msg; $.jGrowl(msg, {theme: "jGrowl-notify-error", position: "bottom-right", sticky: true }); } //Standard notification function notifyMessage(msg){ - msg = "

            Info

            " + msg; + msg = "

            "+tr("Info")+"

            " + msg; $.jGrowl(msg, {theme: "jGrowl-notify-submit", position: "bottom-right"}); } @@ -248,7 +250,7 @@ function prettyPrintRowJSON(field,value,padding,weight, border_bottom,padding_to border-bottom:'+border_bottom+';\ padding-top:'+padding_top_bottom+'px;\ padding-bottom:'+padding_top_bottom+'px;">' - +field+ + +tr(field)+ '\ '+ - field+ + tr(field)+ '\ '; var array; for (var j=0; j
            '); + dialogs_context.append('
            '); var dialog = $('#template_update_dialog',dialogs_context); //Put HTML in place dialog.html( '
            \ -

            Please, choose and modify the template you want to update:

            \ +

            '+tr("Please, choose and modify the template you want to update:")+'

            \
            \ - \ + \ \
            \ - \ + \
            \
            \
            \ \
            \
            \ @@ -706,7 +708,7 @@ function popUpTemplateUpdateDialog(elem_str,select_items,sel_elems){ if (sel_elems.length >= 1){ //several items in the list are selected //grep them - var new_select= sel_elems.length > 1? '' : ""; + var new_select= sel_elems.length > 1? '' : ""; $('option','').each(function(){ var val = $(this).val(); if ($.inArray(val,sel_elems) >= 0){ diff --git a/src/sunstone/public/js/sunstone.js b/src/sunstone/public/js/sunstone.js index 99bff73ac0..b23bb3f279 100644 --- a/src/sunstone/public/js/sunstone.js +++ b/src/sunstone/public/js/sunstone.js @@ -549,7 +549,7 @@ function initListButtons(){ $('.multi_action_slct',main_tabs_context).each(function(){ //prepare replacement buttons var buttonset = $('
            Previous action').button(); + var button1 = $('').button(); button1.attr("disabled","disabled"); var button2 = $('').button({ text:false, @@ -612,19 +612,19 @@ function initListButtons(){ //Prepares the standard confirm dialogs function setupConfirmDialogs(){ - dialogs_context.append('
            '); + dialogs_context.append('
            '); var dialog = $('div#confirm_dialog',dialogs_context); //add the HTML with the standard question and buttons. dialog.html( '\ -
            You have to confirm this action.
            \ +
            '+tr("You have to confirm this action.")+'
            \
            \ -
            Do you want to proceed?
            \ +
            '+tr("Do you want to proceed?")+'
            \
            \
            \ - \ - \ + \ + \
            \ '); @@ -646,17 +646,17 @@ function setupConfirmDialogs(){ return false; }); - dialogs_context.append('
            '); + dialogs_context.append('
            '); dialog = $('div#confirm_with_select_dialog',dialogs_context); dialog.html( '
            \ -
            You need to select something.
            \ +
            '+tr("You need to select something.")+'
            \ \
            \ - \ - \ + \ + \
            \
            '); diff --git a/src/sunstone/public/locale/ru/ru.js b/src/sunstone/public/locale/ru/ru.js new file mode 100644 index 0000000000..8b6cc28530 --- /dev/null +++ b/src/sunstone/public/locale/ru/ru.js @@ -0,0 +1,1036 @@ +//Переведено ЗАО «ВИВОСС и ОИ», 2011 +lang="ru" +datatable_lang = "ru_datatable.txt" +locale={ +"information":"информация", +"#VMS":"Кол-во ВМ", +"+ New Group":"Создать группу", +"+ New":"Добавить", +". No disk id or image name specified":". Не указано название образа или № диска", +"ACL Rules":"Правила контроля доступа", +"ACL String preview:":"Предпросмотр правила:", +"ACLs":"Списки контроля", +"ACPI":"ACPI", +//"ACTIVE":"", +"Accept (default)":"Принять (по умолчанию)", +"Acl create":"Список контроля создан", +"Acl delete":"Удален список контроля с номером ", +"Acl":"Список контроля доступа", +"Add Graphics":"Добавить графические устройства", +"Add Hypervisor raw options":"Добавить исходные опции гипервизора", +"Add context variables":"Добавить контекстные переменные", +"Add custom variables":"Добавить пользовательские переменные", +"Add disk/image":"Добавить диск/образ", +"Add disks/images":"Добавить диски/образы", +"Add inputs":"Добавить устройства ввода", +"Add lease":"Добавить адрес", +"Add network":"Добавить сеть", +"Add placement options":"Добавить опции размещения", +"Add to group":"Включить в группу", +"Add":"Добавить", +"Advanced mode":"Расширенный режим", +"Affected resources":"Затрагиваемые правилом ресурсы", +"All":"Все", +"Allowed operations":"Разрешенные действия", +"Amount of RAM required for the VM, in Megabytes.":"Объем ОЗУ (в МБ), необходимый для ВМ.", +"Applies to":"Применено к", +"ARCH":"Архитектура", +"Architecture:":"Архитектура:", +"Arguments for the booting kernel":"Параметры для загрузки ядра", +"BOOT":"Тип ус-ва загрузки", +"BRIDGE":"Шлюз", +"BUS":"Тип шины", +"Block":"Block", +"Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM":"Логическое выражение, исключающее элементы из списка узлов, подходящих для запуска данной ВМ", +"Boot device type":"Тип устройства загрузки", +"Boot method:":"Метод загрузки:", +"Boot/OS options":"Загрузка и тип ОС", +"Boot:":"Загрузка:", +"Bootloader:":"Загрузчик:", +"Bridge":"Шлюз", +"Bus:":"Тип шины:", +"CD-ROM":"CD-ROM", +"CLONE":"Образ клонируется", +"CPU Monitoring information":"Мониторинг ЦП", +"CPU Use":"Использование ЦП", +"CPU architecture to virtualization":"Архитектура ЦП для виртуализации", +"CPU":"ЦП", +"CPUSPEED":"Тактовая частота ЦП", +"Cancel":"Отменить", +"Canvas not supported.":"Canvas не поддерживается.", +"Capacity options":"Настройки производительности", +"Capacity":"Производительность", +"Change group":"Сменить группу", +"Change owner":"Сменить владельца", +"Clone this image":"Клонировать образ", +"Clone:":"Образ клонируется:", +"Confirmation of action":"Подтверждение действия", +"Context variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены", +"Context":"Контекст", +"Create ACL":"Создать список контроля", +"Create VM Template":"Создать шаблон ВМ", +"Create Virtual Machine":"Создать виртуальную машину", +"Create Virtual Network":"Создать виртуальную сеть", +"Create an empty datablock":"Создать пустой блок данных", //!! +"Create group":"Создать группу", +"Create host":"Создать узел", +"Create user":"Создать пользователя", +"Create":"Создать", +"Current NICs:":"Текущие контроллеры сет. интерфейса:", +"Current disks:":"Текущие диски:", +"Current inputs:":"Текущие УВВ:", +"Current leases:":"Текущие адреса:", +"Current variables:":"Текущее значение:", +"Custom variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены", +"Custom variables":"Пользовательские переменные", +"DESCRIPTION":"Краткое описание", +"DEV_PREFIX":"Префикс устройства", +//"DISABLED":"", +"DISK":"Сведения о диске", +"DISK_ID":"№ диска", +"DRIVER":"Драйвер", +"Dashboard":"Инф. панель", +"Data:":"Данные:", +"Datablock":"Блок данных", +"Default":"По умолчанию", +"Delete from group":"Исключить из группы", +"Delete host":"Удалить узел", +"Delete":"Удалить", +"Deploy # VMs:":"Кол-во экземпляров ВМ для размещения:", +"Deploy ID":"№ размещения", +"Deploy":"Разместить на узле", +"Description:":"Описание:", +"Device prefix:":"Префикс устройства:", +"Device to be mounted as root":"Устройство, монтируемое как корневое", +"Device to map image disk. If set, it will overwrite the default device mapping":"Устройство для образа диска. Если установлено, то оно перезапищет устройсво картографирования по умолчанию.", +"Disable":"Отключить", +"Disallow access to the VM through the specified ports in the TCP protocol":"Запретить доступ к ВМ через указанные порты для TCP протокола", +"Disallow access to the VM through the specified ports in the UDP protocol":"Запретить доступ к ВМ через указанные порты для UDP протокола", +"Disk file location path or URL":"Путь расположения файла диска или URL", +"Disk type":"Тип диска", +"Disk":"Диск", +"Disks":"Диски", +"Do you want to proceed?":"Хотите продолжить?", +"Driver default":"Драйвер по умолчанию", +"Driver:":"Драйвер:", +"Drivers":"Драйверы", +"Drop":"Сбросить", +"Dummy":"Заглушка", +"EC2":"EC2", +"ERROR":"Сведения об ошибках", +"Enable":"Включить", +"Error":"Ошибка", +"FEATURES":"Особенности", +//"FIXED":"", +"FREECPU":"Незадействованный ресурс ЦП", +"FREEMEMORY":"Свободно ОЗУ", +"FS type:":"Тип ФС:", +"FS":"FS", +"Features":"Особенности", +"Fields marked with":"Поля помеченные", +"File":"Файл", +"Filesystem type for the fs images":"Тип файловой системы для образов ФС", +"Fixed network":"Фиксированные адреса", +"Floppy":"Floppy", +"Fold / Unfold all sections":"Свернуть/развернуть все разделы", +"Format:":"Формат:", +"GRAPHICS":"Параметры графического доступа", +"Get Information":"Получить информацию", +"Get Pool of my/group\'s resources":"Получить пул доступных мне/группе ресурсов", +"Get Pool of resources":"Получить пул ресурсов", +"Graphics type:":"Тип ГУ:", +"Graphics":"Графические устройства", +"Group create":"Группа создана", +"Group delete":"Группа удалена", +"Group name:":"Название группы:", +"Group":"Группа пользователей", +"Groups":"Группы", +"HOSTNAME":"Название узла", +"HW address associated with the network interface":"MAC-адрес, связанный с сетевым интерфейсом", +"HYPERVISOR":"Гипервизор", +"Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.":"Аппаратное устройствое, которое будет отвечать за эмуляцию сетевого интерфейса. Для Xen это атрибут vif.", +"Historical monitoring information":"Мониторинг состояния", +"Hold":"Запретить размещение", +"Host information":"Состояние узла", +"Host parameters":"Параметры узла", +"Host shares":"Ресурсы узла", +"Host template":"Шаблон узла", +"Host":"Узел", +"Hostname":"Название узла", +"Hosts (total/active)":"Узлы (всего/из них активных)", +"Hosts CPU":"Загрузка ЦП", +"Hosts memory":"Загрузка ОЗУ", +"Hosts":"Узлы", +"Human readable description of the image for other users.":"Краткое описание образа.", +"ICMP policy":"Политика ICMP", +"ID":"№", +"IDE":"IDE", +"IM MAD":"Модуль ср-ва мониторинга", +"IMAGE":"Используемый образ", +"IMAGE_ID":"№ образа", +//"INIT":"", +"IP to listen on":"IP-адрес для прослушивания", +"IP":"IP-адрес", +"IP:":"IP:", +"Icmp:":"Icmp:", +"Image information":"Информация об образе", +"Image name:":"Название образа:", +"Image template":"Шаблон образа", +"Images (total/public)":"Образы (всего/из них открытых)", +"Images":"Образы ВМ", +"Image":"Образ", +"Info":"Информация", +"Information Manager:":"Cредство мониторинга:", +"Information":"Информация", +"information":" ", +"Initrd:":"Диск нач. иниц.(initrd):", +"Inputs":"Устройства ввода", +"Instantiate":"Создать экземпляр ВМ", +"KVM":"KVM", +"Kernel commands:":"Команды ядра:", +"Kernel:":"Ядро:", +"Keyboard configuration locale to use in the VNC display":"Раскладка клавиатуры, используемая при работе с VNC-дисплеем", +"Keymap":"Раскладка клавиатуры", +"LCM State":"Текущее состояние ВМ", +"LEASES":"АДРЕСА", +"LISTEN":"Прослушивать IP", +"Lease IP:":"IP-адрес:", +"Lease MAC (opt):":"MAC-адрес (необяз.):", +"Lease MAC:":"MAC-адрес:", +"Leases information":"Сведения по имеющимся адресам виртуальной сети", +"Listen IP:":"Прослушивать IP:", +"Live migrate":"Перенести запущенную ВМ", +"Loading":"Идет загрузка", +"MAC":"MAC-адрес", +"MAC:":"MAC-адрес:", +"MEMORY":"Объем ОЗУ", +"MESSAGE":"Сообщение", +"MODELNAME":"Модель ЦП", +//"MONITORED":"", +//"MONITORING":"", +"Make non persistent":"Сделать непостоянным", +"Make persistent":"Сделать постоянным", +"Manage":"Управлять", +"Manual":"В ручную", +"Max Mem":"Доступно ОЗУ", +"Memory monitoring information":"Мониторинг ОЗУ", +"Memory use":"Использование ОЗУ", +"Memory":"Память", +"Migrate":"Перенести ВМ", +"Model:":"Модель:", +"Monitoring information":"Мониторинг", +"Mount image as read-only":"Монтировать образ только для чтения", +"Mouse":"Мышь", +"NAME":"Название", +"Name for the context variable":"Имя контекстной переменной", +"Name for the custom variable":"Имя пользовательской переменной", +"Name for the tun device created for the VM":"Имя сетевого туннеля, созданного для ВМ", +"Name of a shell script to be executed after creating the tun device for the VM":"shell-скрипт, который будет выполнен после создания сетевого туннеля для ВМ", +"Name of the bridge the network device is going to be attached to":"Шлюз, с которым будет связано сетевое устройство", +"Name of the image to use":"Название образа для использования", +"Name of the network to attach this device":"Сеть, подключаемая к данному устройству", +"Name that the Image will get. Every image must have a unique name.":"Название, которое получит образ. Каждый образ должен обладать уникальным названием.", +"Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.":"Название, которое получит ВМ. Если название не будет указано, то оно будет сгенерировано в формате one-<№ ВМ>.", +"Name":"Название", +"Net_RX":"Принято", +"Net_TX":"Отправлено", +"NETRX":"Принято по сети", +"NETTX":"Отправлено по сети", +"NETWORK":"Название вирт. сети", +"NETWORK_ADDRESS":"Адрес сети", +"NETWORK_ID":"№ вирт. сети", +"NETWORK_SIZE":"Размер сети", +"NIC":"Контроллер сетевого интерфейса", +"NO":"нет", +"Network Address:":"Адрес сети:", +"Network reception":"Сеть: принято", +"Network size:":"Размер сети:", +"Network transmission":"Сеть: отправлено", +"Network type:":"Тип сети:", +"Network":"Сеть", +"New: ":"Создать новый ресурс: ", +"No disks defined":"Дисков не обнаружено", +"No":"Нет", +"None":"Никакой", +"Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.":"Количество виртуальных процессоров. Это значение опционально, используется поведение гипервизора по умолчанию - один виртуальный ЦП.", +"OK":"OK", +"OS and Boot options":"Опции загрузки и ОС", +"OS":"ОС", +"Open VNC Session":"Открыть VNC-сессию", +"Optional, please select":"Опционально, пожалуйста выберите", +"Owned by group":"Принадлежит группе", +"Owner":"Владелец", +"PAE:":"PAE:", +"PATH":"ПУТЬ", +"PERSISTENT":"Постоянный", +"PORT":"Номер порта доступа", +"PS2":"PS/2", +"Password for the VNC server":"Пароль для VNC сервера", +"Password:":"Пароль:", +"Path to the OS kernel to boot the image":"Путь к ядру ОС для загрузки образа", +"Path to the bootloader executable":"Путь к исполняемому файлу загрузчика", +"Path to the initrd image":"Путь к образу initrd", +"Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.":"Путь к исходному файлу, который будет скопирован в хранилище образов. Если путь не указан для типа образа БЛОК ДАННЫХ, то будет создан пустой образ.", +"Path vs. source:":"Исходные данные образа:", +"Path:":"Путь к эталонному файлу образа:", +"Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.":"Процент процессорного времени ЦП, предоставлемого ВМ, разделенный на 100. Например, для выделения половины процессорного времени следует указать 0.5.", +"Permits access to the VM only through the specified ports in the TCP protocol":"Разрешить доступ к ВМ только через указанные порты протокола TCP", +"Permits access to the VM only through the specified ports in the UDP protocol":"Разрешить доступ к ВМ только через указанные порты протокола UPD", +"Persistence of the image":"Если образ является постоянным, то при каждом завершении работы с полученной на его основе виртуальной машиной все изменения будут сохранены в образе.\n\n Важно помнить, что сохранение выполнится только в случае завершения работы соответствующей ВМ при помощи операций «Выключить» и «Отменить».\n\nПостоянный образ всегда хранится в одном экземпляре.", +"Persistent":"Постоянный", +"Physical address extension mode allows 32-bit guests to address more than 4 GB of memory":"Режим расширенной физической адресации позволяет использовать 32-битным ВМ больше 4-х ГБ ", +"Placement":"Размещение", +"Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.":"«Путь к эталонному файлу образа» — образ создается путем копирования эталонного файла образа в хранилище образов.\n\n«Источник» — в данное поле следует указывать местоположение образа (в качестве образа будет использован ресурс, непосредственно указанный в поле «Источник», а не копия этого ресурса).", +"Please choose":"Пожалуйста выберите", +"Please provide a lease IP":"Необходимо указать IP-адрес", +"Please provide a network address":"Укажите адрес сети", +"Please provide a resource ID for the resource(s) in this rule":"Необходимо указать № ресурса(ов) для данного правила)", +"Please select a group to which the selected resources belong to":"Необходимо выбрать группу пользователей, которой принадлежат выбранные ресурсы", +"Please select at least one operation":"Необходимо выбрать по меньшей мере одну операцию", +"Please select at least one resource":"Необходимо выбрать по меньшей мере один ресурс", +"Please select":"Выберите", +"Please specify to who this ACL applies":"Необходимо указать, к кому применять данный список контроля", +"Please specify:":"Укажите:", +"Please, choose and modify the template you want to update:":"Укажите шаблон, который хотите обновить:", +"Port blacklist":"Список запрещенных портов", +"Port for the VNC server":"Порт для сервера VNC", +"Port whitelist":"Список разрешенных портов", +"Port:":"Порт:", +"Predefined":"По умолчанию", +"Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).":"Префикс эмулируемого устройства, на которое будет смонтирован образ. Например, «hd» и «sd». Если не указать префикс, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «hd»).", +"Previous action":"Предыдущее действие", +"Provide a path":"Указать путь к эталонному файлу образа", +"Provide a source":"Указать источник для образа", +"Public scope of the image":"Информация о доступности образа", +"Public":"Открытый", +"Publish":"Сделать открытым", +"Quickstart":"Типовые операции", +//"RANGED":"" +"RAW":"RAW", +"READONLY":"Доступен только на чтение", +//"READY":"", +"Ranged network":"Диапазон адресов", +"Rank:":"Степень:", +"Raw data to be passed directly to the hypervisor":"Исходные данные, передаваемые напрямую гипервизору", +"Raw":"Исходная опция", +"Read only:":"Только чтение:", +"Refresh list":"Обновить список", +"Register time":"Время регистрации", +"Registration time":"Время регистрации", +"Release":"Разрешить размещение", +"Remove lease":"Удалить адрес", +"Remove selected":"Удалить выбранные", +"Request an specific IP from the Network":"Запросить определенный IP-адрес из сети", +"Requirements:":"Требования:", +"Reset":"Сбросить", +"Resource ID / Owned by":"№ ресурса / Принадлежит", +"Resource ID:":"№ ресурса:", +"Resource subset:":"Подмножество ресурсов:", +"Restart":"Перезапустить", +"Resubmit":"Разместить повторно", +"Resume":"Возобновить работу ВМ", +"Retrieving...":"Извлечение...", +"Root:":"Корень:", +"Running VMs":"Запущено ВМ", +"SAVE":"Сохранение изменений", +"SCSI":"SCSI", +"SDL":"SDL", +"SHARED":"Общий каталог", +"SOURCE":"Источник", +"Save as":"Сохранить как", +"Save this image after shutting down the VM":"Сохранить образ после выключения ВМ", +"Save:":"Сохранить:", +"Saveas for VM with ID":"Сохранить как для ВМ с №", +"Script:":"Скрипт:", +"Select a template":"Выберите шаблон", +"Select boot method":"Выберите метод загрузки", +"Select disk:":"Выберите диск:", +"Select template:":"Использовать шаблон:", +"Select the group from which to delete users:":"Выберите группу, из которой требуется исключить пользователей:", +"Select the new ":"Выбрать новую группу", +"Select the new group to add users:":"Выберите новую группу, в которую требуется включить пользователей:", +"Select the new group:":"Выберите новую группу:", +"Select the new owner:":"Выбрать нового владельца:", +"Setup Networks":"Настройка сетей", +"Shutdown":"Выключить", +"Size in MB":"Размер в МБ", +"Size of the datablock in MB.":"Размер блока данных в МБ.", +"Size:":"Размер:", +"Skipping VM ":"Пропуск ВМ ", +"Source to be used in the DISK attribute. Useful for not file-based images.":"В качестве источника указывается местоположение образа, который планируется использовать непосредственно.", +"Source":"Источник", +"Specific ID":"Ресурс с конкретным №", +"Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported":"Формат образа виртуального диска. Для KVM: raw, qcow2. Для Xen: tap:aio:, file:. Форматы VMware не поддерживаются", +"Start Time":"Время запуска", +"Start time":"Время запуска", +"State":"Состояние", +"Status":"Статус", +"Stop":"Остановить", +"Submitted":"Выполнено", +"Summary of resources":"Использование ресурсов", +"Suspend":"Приостановить работу ВМ", +"Swap":"Swap", +"TARGET":"Ус-во загрузки", +"TEMPLATE_ID":"№ шаблона ВМ", +"TM MAD":"Модуль ср-ва передачи", +"TYPE":"Тип", +"Tablet":"Планшетный ПК", +"Target:":"Ус-во загрузки:", +"Tcp black ports:":"Запрещенные TCP-порты:", +"Tcp firewall mode:":"TCP режим брандмауэра:", +"Tcp white ports:":"Разрешенные TCP-порты:", +"Template information":"Сведения о шаблоне", +"Template updated correctly":"Шаблон успешно обновлен", +"Template":"Шаблон", +"Templates":"Шаблоны ВМ", +"There are mandatory fields missing in the OS Boot options section":"В разделе «Загрузка и тип ОС» не заполнены некоторые обязательные поля", +"There are mandatory fields missing in the capacity section":"В разделе «Производительность» не заполнены некоторые обязательные поля", +"There are mandatory parameters missing in this section":"В данном разделе указаны не все обязательные параметры", +"There are mandatory parameters missing":"Указаны не все обязательные параметры", +"This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others":"В данном поле устанавливается значение атрибута, используемое для ранжирования узлов, пригодных для размещения ВМ. Значение атрибута определяет, какие из узлов лучше подходят для размещения ВМ.", +"This rule applies to:":"Прим. правило к:", +"This will cancel selected VMs":"Прервать работу выбранных ВМ", +"This will change the main group of the selected users. Select the new group:":"Изменение основной группы для выбранных пользователей. Выберите новую группу:", +"This will delete the selected VMs from the database":"Удалить выбранные ВМ и связанные с ними образы дисков из базы данных и хранилища образов", +"This will deploy the selected VMs on the chosen host":"Разместить выбранные ВМ на определенном узле", +"This will hold selected pending VMs from being deployed":"Приостановить процедуру размещения ВМ на узле", +"This will initiate the shutdown process in the selected VMs":"Запустить процесс выключения выбранных ВМ", +"This will live-migrate the selected VMs to the chosen host":"Перенести выбранные запущенные ВМ, не завершая их работы, с текущих узлов на выбранный", +"This will migrate the selected VMs to the chosen host":"Перенести выбранные остановленные ВМ с текущих узлов на выбранный", +"This will redeploy selected VMs (in UNKNOWN or BOOT state)":"Повторно выполнить процедуру размещения выбранных ВМ, находящихся в состоянии UNKNOWN или BOOT, на узле", +"This will release held machines":"Продолжить ранее приостановленное размещение ВМ на узле", +"This will resubmits VMs to PENDING state":"Повторно выполнить попытку размещения выбранных ВМ на одном из доступных узлов системы виртуализации (перевод в состояние PENDING)", +"This will resume selected stopped or suspended VMs":"Возобновить работу выбранных остановленных или приостановленных ВМ", +"This will stop selected VMs":"Остановить выбранные ВМ", +"This will suspend selected machines":"Приостановить выбранные ВМ", +"TIMESTAMP":"Время", +"TOTALCPU":"Ресурс ЦП", +"TOTALMEMORY":"Объем ОЗУ", +"Total Leases":"Суммарное количество адресов", +"Total VM count":"Количество виртуальных машин", +"Transfer Manager:":"Средство передачи:", +"Type of disk device to emulate.":"Тип эмулируемого дискового устройства", +"Type of disk device to emulate: ide, scsi":"Тип эмулируемого дискового устройства: ide, scsi", +"Type of file system to be built. This can be any value understood by mkfs unix command.":"Тип создаваемой ФС. Может быть указан любой тип, который используется в unix-команде mkfs.", +"Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).":"Тип. Если не указать тип образа, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «OS»).", +"Type":"Тип", +"USB":"USB", +//"USED":"", +"USEDCPU":"Использование ресурса ЦП", +"USEDMEMORY":"Используемый объем ОЗУ", +"USED_BY":"Экземпляров в использовании", +"Udp black ports:":"Запрещенные UPD-порты:", +"Udp firewall mode:":"UPD режим брандмауэра:", +"Udp white ports:":"Разрешенные UPD-порты:", +"Unpublish":"Отменить статус «Открытый»", +"Update a template":"Обновить шаблон", +"Update template":"Обновить шаблон", +"Update":"Обновить", +"Use":"Использовать", +"Used CPU (allocated)":"Использовано ОЗУ(реально)", +"Used CPU (real)":"Использовано ЦП(реально)", +"Used CPU":"Используется ЦП", +"Used Mem (allocated)":"Использовано ОЗУ(выделено)", +"Used Mem (real)":"Использовано ОЗУ(реально)", +"Used Memory":"Используется памяти", +"Useful for power management, for example, normally required for graceful shutdown to work":"Требуется для корректного завершения работы ВМ средствами системы виртуализации", +"User chgrp":"Изменение группы", +"User create":"Пользователь создан", +"User delete":"Пользователь удален", +"User name and password must be filled in":"Необходимо указать и имя пользователя, и пароль", +"User":"Пользователь", +"Username:":"Имя пользователя:", +"Users":"Пользователи", +"VCPU":"Кол-во вирт. ЦП", +"VCPU:":"Кол-во вирт. ЦП:", +"VID":"№ ВМ", +"VM Instance":"Экземпляр ВМ", +"VM Instances (":"Экземпляры ВМ (", +"VM MAD":"Модуль ср-ва виртуализации", +"VM Name:":"Название ВМ:", +"VM Network stats":"Статистика виртуальных сетей", +"VM Save As":"ВМ сохранить как", +"VM Template":"Шаблон ВМ", +"VM Templates (total/public)":"Шаблоны ВМ (всего/из них открытых)", +"VM Templates":"Шаблоны ВМ", +"VM information":"Информация о ВМ", +"VM log":"Журнал ВМ", +"VM template":"Шаблон ВМ", +"VM":"ВМ", +"VMID":"№ ВМ", +"VNC Access":"Доступ по VNC", +"VNC Disabled":"VNC недоступно", +"VNC Session":"VNC сессия", +"VNC connection":"VNC соединение", +"VNC":"VNC", +"Value of the context variable":"Значение контекстной переменной", +"Value of the custom variable":"Значение пользовательской перменной", +"Value:":"Значение:", +"Virtio (KVM)":"Virtio (KVM)", +"Virtio":"Virtio", +"Virtual Machine information":"Информация о виртуальной машине", +"Virtual Machines":"Вирт. машины", +"Virtual Network name missing!":"Отсутствует название виртуальной сети!", +"Virtual Network template":"Шаблон виртуальной сети", +"Virtual Networks (total/public)":"Виртуальные сети (всего/из них открытых)", +"Virtual Networks":"Вирт. сети", +"Virtual Network":"Виртуальная сеть", +"Virtual Network information":"Информация о виртуальной сети", +"Virtual network information":"Информация о виртуальной сети", +"Virtual network template":"Шаблон виртуальной сети", +"Virtualization Manager:":"Средство виртуализации:", +"Wizard KVM":"Шаблон KVM", +"Wizard VMware":"Шаблон VMware", +"Wizard XEN":"Шаблон XEN", +"Wizard":"Мастер настройки", +"Write the Virtual Machine template here":"Отредактируйте параметры шаблона ВМ вручную", +"Write the Virtual Network template here":"Отредактируйте параметры шаблона вирт. сети вручную", +"Write the image template here":"Отредактируйте параметры шаблона образа ВМ вручную", +"XEN":"XEN", +"Xen templates must specify a boot method":"В шаблон Xen необходимо указывать метод загрузки", +"YES":"да", +"Yes":"Да", +"You have not selected a template":"Вы не выбрали шаблон", +"You have to confirm this action.":"Необходимо подтвердить данную операцию.", +"You need to select something.":"Вы должны что-нибудь выбрать.", +"active":"активных", +"are mandatory":"обязательные", +"cdrom":"cdrom", +"cpu_usage":"использование", +"disk id :":"диск №: ", +"error":"ошибок", +"failed":"дефектных", +"fd":"fd", +"hd":"hd", +"id":"№", +"max_cpu":"максимально", +"max_mem":"максимально", +"mem_usage":"использование", +"net_rx":"принято", +"net_tx":"отправлено", +"network":"network", +"no":"никак нет", +"running":"запущенных", +"total":"всего", +"used_cpu":"использовано", +"used_mem":"использовано", +"yes":"да" +}; +//Переведено ЗАО «ВИВОСС и ОИ», 2011 + +datatable_lang = "ru_datatable.txt" +locale={ +"information":"информация", +"#VMS":"Кол-во ВМ", +"+ New Group":"Создать группу", +"+ New":"Добавить", +". No disk id or image name specified":". Не указано название образа или № диска", +"ACL Rules":"Правила контроля доступа", +"ACL String preview:":"Предпросмотр правила:", +"ACLs":"Списки контроля", +"ACPI":"ACPI", +//"ACTIVE":"", +"Accept (default)":"Принять (по умолчанию)", +"Acl create":"Список контроля создан", +"Acl delete":"Удален список контроля с номером ", +"Acl":"Список контроля доступа", +"Add Graphics":"Добавить графические устройства", +"Add Hypervisor raw options":"Добавить исходные опции гипервизора", +"Add context variables":"Добавить контекстные переменные", +"Add custom variables":"Добавить пользовательские переменные", +"Add disk/image":"Добавить диск/образ", +"Add disks/images":"Добавить диски/образы", +"Add inputs":"Добавить устройства ввода", +"Add lease":"Добавить адрес", +"Add network":"Добавить сеть", +"Add placement options":"Добавить опции размещения", +"Add to group":"Включить в группу", +"Add":"Добавить", +"Advanced mode":"Расширенный режим", +"Affected resources":"Затрагиваемые правилом ресурсы", +"All":"Все", +"Allowed operations":"Разрешенные действия", +"Amount of RAM required for the VM, in Megabytes.":"Объем ОЗУ (в МБ), необходимый для ВМ.", +"Applies to":"Применено к", +"ARCH":"Архитектура", +"Architecture:":"Архитектура:", +"Arguments for the booting kernel":"Параметры для загрузки ядра", +"BOOT":"Тип ус-ва загрузки", +"BRIDGE":"Шлюз", +"BUS":"Тип шины", +"Block":"Block", +"Boolean expression that rules out provisioning hosts from list of machines suitable to run this VM":"Логическое выражение, исключающее элементы из списка узлов, подходящих для запуска данной ВМ", +"Boot device type":"Тип устройства загрузки", +"Boot method:":"Метод загрузки:", +"Boot/OS options":"Загрузка и тип ОС", +"Boot:":"Загрузка:", +"Bootloader:":"Загрузчик:", +"Bridge":"Шлюз", +"Bus:":"Тип шины:", +"CD-ROM":"CD-ROM", +"CLONE":"Образ клонируется", +"CPU Monitoring information":"Мониторинг ЦП", +"CPU Use":"Использование ЦП", +"CPU architecture to virtualization":"Архитектура ЦП для виртуализации", +"CPU":"ЦП", +"CPUSPEED":"Тактовая частота ЦП", +"Cancel":"Отменить", +"Canvas not supported.":"Canvas не поддерживается.", +"Capacity options":"Настройки производительности", +"Capacity":"Производительность", +"Change group":"Сменить группу", +"Change owner":"Сменить владельца", +"Clone this image":"Клонировать образ", +"Clone:":"Образ клонируется:", +"Confirmation of action":"Подтверждение действия", +"Context variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены", +"Context":"Контекст", +"Create ACL":"Создать список контроля", +"Create VM Template":"Создать шаблон ВМ", +"Create Virtual Machine":"Создать виртуальную машину", +"Create Virtual Network":"Создать виртуальную сеть", +"Create an empty datablock":"Создать пустой блок данных", //!! +"Create group":"Создать группу", +"Create host":"Создать узел", +"Create user":"Создать пользователя", +"Create":"Создать", +"Current NICs:":"Текущие контроллеры сет. интерфейса:", +"Current disks:":"Текущие диски:", +"Current inputs:":"Текущие УВВ:", +"Current leases:":"Текущие адреса:", +"Current variables:":"Текущее значение:", +"Custom variable name and value must be filled in":"Поля «Имя переменной» и «Значение» должны быть заполнены", +"Custom variables":"Пользовательские переменные", +"DESCRIPTION":"Краткое описание", +"DEV_PREFIX":"Префикс устройства", +//"DISABLED":"", +"DISK":"Сведения о диске", +"DISK_ID":"№ диска", +"DRIVER":"Драйвер", +"Dashboard":"Инф. панель", +"Data:":"Данные:", +"Datablock":"Блок данных", +"Default":"По умолчанию", +"Delete from group":"Исключить из группы", +"Delete host":"Удалить узел", +"Delete":"Удалить", +"Deploy # VMs:":"Кол-во экземпляров ВМ для размещения:", +"Deploy ID":"№ размещения", +"Deploy":"Разместить на узле", +"Description:":"Описание:", +"Device prefix:":"Префикс устройства:", +"Device to be mounted as root":"Устройство, монтируемое как корневое", +"Device to map image disk. If set, it will overwrite the default device mapping":"Устройство для образа диска. Если установлено, то оно перезапищет устройсво картографирования по умолчанию.", +"Disable":"Отключить", +"Disallow access to the VM through the specified ports in the TCP protocol":"Запретить доступ к ВМ через указанные порты для TCP протокола", +"Disallow access to the VM through the specified ports in the UDP protocol":"Запретить доступ к ВМ через указанные порты для UDP протокола", +"Disk file location path or URL":"Путь расположения файла диска или URL", +"Disk type":"Тип диска", +"Disk":"Диск", +"Disks":"Диски", +"Do you want to proceed?":"Хотите продолжить?", +"Driver default":"Драйвер по умолчанию", +"Driver:":"Драйвер:", +"Drivers":"Драйверы", +"Drop":"Сбросить", +"Dummy":"Заглушка", +"EC2":"EC2", +"ERROR":"Сведения об ошибках", +"Enable":"Включить", +"Error":"Ошибка", +"FEATURES":"Особенности", +//"FIXED":"", +"FREECPU":"Незадействованный ресурс ЦП", +"FREEMEMORY":"Свободно ОЗУ", +"FS type:":"Тип ФС:", +"FS":"FS", +"Features":"Особенности", +"Fields marked with":"Поля помеченные", +"File":"Файл", +"Filesystem type for the fs images":"Тип файловой системы для образов ФС", +"Fixed network":"Фиксированные адреса", +"Floppy":"Floppy", +"Fold / Unfold all sections":"Свернуть/развернуть все разделы", +"Format:":"Формат:", +"GRAPHICS":"Параметры графического доступа", +"Get Information":"Получить информацию", +"Get Pool of my/group\'s resources":"Получить пул доступных мне/группе ресурсов", +"Get Pool of resources":"Получить пул ресурсов", +"Graphics type:":"Тип ГУ:", +"Graphics":"Графические устройства", +"Group create":"Группа создана", +"Group delete":"Группа удалена", +"Group name:":"Название группы:", +"Group":"Группа пользователей", +"Groups":"Группы", +"HOSTNAME":"Название узла", +"HW address associated with the network interface":"MAC-адрес, связанный с сетевым интерфейсом", +"HYPERVISOR":"Гипервизор", +"Hardware that will emulate this network interface. With Xen this is the type attribute of the vif.":"Аппаратное устройствое, которое будет отвечать за эмуляцию сетевого интерфейса. Для Xen это атрибут vif.", +"Historical monitoring information":"Мониторинг состояния", +"Hold":"Запретить размещение", +"Host information":"Состояние узла", +"Host parameters":"Параметры узла", +"Host shares":"Ресурсы узла", +"Host template":"Шаблон узла", +"Host":"Узел", +"Hostname":"Название узла", +"Hosts (total/active)":"Узлы (всего/из них активных)", +"Hosts CPU":"Загрузка ЦП", +"Hosts memory":"Загрузка ОЗУ", +"Hosts":"Узлы", +"Human readable description of the image for other users.":"Краткое описание образа.", +"ICMP policy":"Политика ICMP", +"ID":"№", +"IDE":"IDE", +"IM MAD":"Модуль ср-ва мониторинга", +"IMAGE":"Используемый образ", +"IMAGE_ID":"№ образа", +//"INIT":"", +"IP to listen on":"IP-адрес для прослушивания", +"IP":"IP-адрес", +"IP:":"IP:", +"Icmp:":"Icmp:", +"Image information":"Информация об образе", +"Image name:":"Название образа:", +"Image template":"Шаблон образа", +"Images (total/public)":"Образы (всего/из них открытых)", +"Images":"Образы ВМ", +"Image":"Образ", +"Info":"Информация", +"Information Manager:":"Cредство мониторинга:", +"Information":"Информация", +"information":" ", +"Initrd:":"Диск нач. иниц.(initrd):", +"Inputs":"Устройства ввода", +"Instantiate":"Создать экземпляр ВМ", +"KVM":"KVM", +"Kernel commands:":"Команды ядра:", +"Kernel:":"Ядро:", +"Keyboard configuration locale to use in the VNC display":"Раскладка клавиатуры, используемая при работе с VNC-дисплеем", +"Keymap":"Раскладка клавиатуры", +"LCM State":"Текущее состояние ВМ", +"LEASES":"АДРЕСА", +"LISTEN":"Прослушивать IP", +"Lease IP:":"IP-адрес:", +"Lease MAC (opt):":"MAC-адрес (необяз.):", +"Lease MAC:":"MAC-адрес:", +"Leases information":"Сведения по имеющимся адресам виртуальной сети", +"Listen IP:":"Прослушивать IP:", +"Live migrate":"Перенести запущенную ВМ", +"Loading":"Идет загрузка", +"MAC":"MAC-адрес", +"MAC:":"MAC-адрес:", +"MEMORY":"Объем ОЗУ", +"MESSAGE":"Сообщение", +"MODELNAME":"Модель ЦП", +//"MONITORED":"", +//"MONITORING":"", +"Make non persistent":"Сделать непостоянным", +"Make persistent":"Сделать постоянным", +"Manage":"Управлять", +"Manual":"В ручную", +"Max Mem":"Доступно ОЗУ", +"Memory monitoring information":"Мониторинг ОЗУ", +"Memory use":"Использование ОЗУ", +"Memory":"Память", +"Migrate":"Перенести ВМ", +"Model:":"Модель:", +"Monitoring information":"Мониторинг", +"Mount image as read-only":"Монтировать образ только для чтения", +"Mouse":"Мышь", +"NAME":"Название", +"Name for the context variable":"Имя контекстной переменной", +"Name for the custom variable":"Имя пользовательской переменной", +"Name for the tun device created for the VM":"Имя сетевого туннеля, созданного для ВМ", +"Name of a shell script to be executed after creating the tun device for the VM":"shell-скрипт, который будет выполнен после создания сетевого туннеля для ВМ", +"Name of the bridge the network device is going to be attached to":"Шлюз, с которым будет связано сетевое устройство", +"Name of the image to use":"Название образа для использования", +"Name of the network to attach this device":"Сеть, подключаемая к данному устройству", +"Name that the Image will get. Every image must have a unique name.":"Название, которое получит образ. Каждый образ должен обладать уникальным названием.", +"Name that the VM will get for description purposes. If NAME is not supplied a name generated by one will be in the form of one-<VID>.":"Название, которое получит ВМ. Если название не будет указано, то оно будет сгенерировано в формате one-<№ ВМ>.", +"Name":"Название", +"Net_RX":"Принято", +"Net_TX":"Отправлено", +"NETRX":"Принято по сети", +"NETTX":"Отправлено по сети", +"NETWORK":"Название вирт. сети", +"NETWORK_ADDRESS":"Адрес сети", +"NETWORK_ID":"№ вирт. сети", +"NETWORK_SIZE":"Размер сети", +"NIC":"Контроллер сетевого интерфейса", +"NO":"нет", +"Network Address:":"Адрес сети:", +"Network reception":"Сеть: принято", +"Network size:":"Размер сети:", +"Network transmission":"Сеть: отправлено", +"Network type:":"Тип сети:", +"Network":"Сеть", +"New: ":"Создать новый ресурс: ", +"No disks defined":"Дисков не обнаружено", +"No":"Нет", +"None":"Никакой", +"Number of virtual cpus. This value is optional, the default hypervisor behavior is used, usually one virtual CPU.":"Количество виртуальных процессоров. Это значение опционально, используется поведение гипервизора по умолчанию - один виртуальный ЦП.", +"OK":"OK", +"OS and Boot options":"Опции загрузки и ОС", +"OS":"ОС", +"Open VNC Session":"Открыть VNC-сессию", +"Optional, please select":"Опционально, пожалуйста выберите", +"Owned by group":"Принадлежит группе", +"Owner":"Владелец", +"PAE:":"PAE:", +"PATH":"ПУТЬ", +"PERSISTENT":"Постоянный", +"PORT":"Номер порта доступа", +"PS2":"PS/2", +"Password for the VNC server":"Пароль для VNC сервера", +"Password:":"Пароль:", +"Path to the OS kernel to boot the image":"Путь к ядру ОС для загрузки образа", +"Path to the bootloader executable":"Путь к исполняемому файлу загрузчика", +"Path to the initrd image":"Путь к образу initrd", +"Path to the original file that will be copied to the image repository. If not specified for a DATABLOCK type image, an empty image will be created.":"Путь к исходному файлу, который будет скопирован в хранилище образов. Если путь не указан для типа образа БЛОК ДАННЫХ, то будет создан пустой образ.", +"Path vs. source:":"Исходные данные образа:", +"Path:":"Путь к эталонному файлу образа:", +"Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.":"Процент процессорного времени ЦП, предоставлемого ВМ, разделенный на 100. Например, для выделения половины процессорного времени следует указать 0.5.", +"Permits access to the VM only through the specified ports in the TCP protocol":"Разрешить доступ к ВМ только через указанные порты протокола TCP", +"Permits access to the VM only through the specified ports in the UDP protocol":"Разрешить доступ к ВМ только через указанные порты протокола UPD", +"Persistence of the image":"Если образ является постоянным, то при каждом завершении работы с полученной на его основе виртуальной машиной все изменения будут сохранены в образе.\n\n Важно помнить, что сохранение выполнится только в случае завершения работы соответствующей ВМ при помощи операций «Выключить» и «Отменить».\n\nПостоянный образ всегда хранится в одном экземпляре.", +"Persistent":"Постоянный", +"Physical address extension mode allows 32-bit guests to address more than 4 GB of memory":"Режим расширенной физической адресации позволяет использовать 32-битным ВМ больше 4-х ГБ ", +"Placement":"Размещение", +"Please choose path if you have a file-based image. Choose source otherwise or create an empty datablock disk.":"«Путь к эталонному файлу образа» — образ создается путем копирования эталонного файла образа в хранилище образов.\n\n«Источник» — в данное поле следует указывать местоположение образа (в качестве образа будет использован ресурс, непосредственно указанный в поле «Источник», а не копия этого ресурса).", +"Please choose":"Пожалуйста выберите", +"Please provide a lease IP":"Необходимо указать IP-адрес", +"Please provide a network address":"Укажите адрес сети", +"Please provide a resource ID for the resource(s) in this rule":"Необходимо указать № ресурса(ов) для данного правила)", +"Please select a group to which the selected resources belong to":"Необходимо выбрать группу пользователей, которой принадлежат выбранные ресурсы", +"Please select at least one operation":"Необходимо выбрать по меньшей мере одну операцию", +"Please select at least one resource":"Необходимо выбрать по меньшей мере один ресурс", +"Please select":"Выберите", +"Please specify to who this ACL applies":"Необходимо указать, к кому применять данный список контроля", +"Please specify:":"Укажите:", +"Please, choose and modify the template you want to update:":"Укажите шаблон, который хотите обновить:", +"Port blacklist":"Список запрещенных портов", +"Port for the VNC server":"Порт для сервера VNC", +"Port whitelist":"Список разрешенных портов", +"Port:":"Порт:", +"Predefined":"По умолчанию", +"Prefix for the emulated device this image will be mounted at. For instance, “hd”, “sd”. If omitted, the default value is the one defined in oned.conf (installation default is “hd”).":"Префикс эмулируемого устройства, на которое будет смонтирован образ. Например, «hd» и «sd». Если не указать префикс, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «hd»).", +"Previous action":"Предыдущее действие", +"Provide a path":"Указать путь к эталонному файлу образа", +"Provide a source":"Указать источник для образа", +"Public scope of the image":"Информация о доступности образа", +"Public":"Открытый", +"Publish":"Сделать открытым", +"Quickstart":"Типовые операции", +//"RANGED":"" +"RAW":"RAW", +"READONLY":"Доступен только на чтение", +//"READY":"", +"Ranged network":"Диапазон адресов", +"Rank:":"Степень:", +"Raw data to be passed directly to the hypervisor":"Исходные данные, передаваемые напрямую гипервизору", +"Raw":"Исходная опция", +"Read only:":"Только чтение:", +"Refresh list":"Обновить список", +"Register time":"Время регистрации", +"Registration time":"Время регистрации", +"Release":"Разрешить размещение", +"Remove lease":"Удалить адрес", +"Remove selected":"Удалить выбранные", +"Request an specific IP from the Network":"Запросить определенный IP-адрес из сети", +"Requirements:":"Требования:", +"Reset":"Сбросить", +"Resource ID / Owned by":"№ ресурса / Принадлежит", +"Resource ID:":"№ ресурса:", +"Resource subset:":"Подмножество ресурсов:", +"Restart":"Перезапустить", +"Resubmit":"Разместить повторно", +"Resume":"Возобновить работу ВМ", +"Retrieving...":"Извлечение...", +"Root:":"Корень:", +"Running VMs":"Запущено ВМ", +"SAVE":"Сохранение изменений", +"SCSI":"SCSI", +"SDL":"SDL", +"SHARED":"Общий каталог", +"SOURCE":"Источник", +"Save as":"Сохранить как", +"Save this image after shutting down the VM":"Сохранить образ после выключения ВМ", +"Save:":"Сохранить:", +"Saveas for VM with ID":"Сохранить как для ВМ с №", +"Script:":"Скрипт:", +"Select a template":"Выберите шаблон", +"Select boot method":"Выберите метод загрузки", +"Select disk:":"Выберите диск:", +"Select template:":"Использовать шаблон:", +"Select the group from which to delete users:":"Выберите группу, из которой требуется исключить пользователей:", +"Select the new ":"Выбрать новую группу", +"Select the new group to add users:":"Выберите новую группу, в которую требуется включить пользователей:", +"Select the new group:":"Выберите новую группу:", +"Select the new owner:":"Выбрать нового владельца:", +"Setup Networks":"Настройка сетей", +"Shutdown":"Выключить", +"Size in MB":"Размер в МБ", +"Size of the datablock in MB.":"Размер блока данных в МБ.", +"Size:":"Размер:", +"Skipping VM ":"Пропуск ВМ ", +"Source to be used in the DISK attribute. Useful for not file-based images.":"В качестве источника указывается местоположение образа, который планируется использовать непосредственно.", +"Source":"Источник", +"Specific ID":"Ресурс с конкретным №", +"Specific image mapping driver. KVM: raw, qcow2. Xen:tap:aio:, file:. VMware unsupported":"Формат образа виртуального диска. Для KVM: raw, qcow2. Для Xen: tap:aio:, file:. Форматы VMware не поддерживаются", +"Start Time":"Время запуска", +"Start time":"Время запуска", +"State":"Состояние", +"Status":"Статус", +"Stop":"Остановить", +"Submitted":"Выполнено", +"Summary of resources":"Использование ресурсов", +"Suspend":"Приостановить работу ВМ", +"Swap":"Swap", +"TARGET":"Ус-во загрузки", +"TEMPLATE_ID":"№ шаблона ВМ", +"TM MAD":"Модуль ср-ва передачи", +"TYPE":"Тип", +"Tablet":"Планшетный ПК", +"Target:":"Ус-во загрузки:", +"Tcp black ports:":"Запрещенные TCP-порты:", +"Tcp firewall mode:":"TCP режим брандмауэра:", +"Tcp white ports:":"Разрешенные TCP-порты:", +"Template information":"Сведения о шаблоне", +"Template updated correctly":"Шаблон успешно обновлен", +"Template":"Шаблон", +"Templates":"Шаблоны ВМ", +"There are mandatory fields missing in the OS Boot options section":"В разделе «Загрузка и тип ОС» не заполнены некоторые обязательные поля", +"There are mandatory fields missing in the capacity section":"В разделе «Производительность» не заполнены некоторые обязательные поля", +"There are mandatory parameters missing in this section":"В данном разделе указаны не все обязательные параметры", +"There are mandatory parameters missing":"Указаны не все обязательные параметры", +"This field sets which attribute will be used to sort the suitable hosts for this VM. Basically, it defines which hosts are more suitable than others":"В данном поле устанавливается значение атрибута, используемое для ранжирования узлов, пригодных для размещения ВМ. Значение атрибута определяет, какие из узлов лучше подходят для размещения ВМ.", +"This rule applies to:":"Прим. правило к:", +"This will cancel selected VMs":"Прервать работу выбранных ВМ", +"This will change the main group of the selected users. Select the new group:":"Изменение основной группы для выбранных пользователей. Выберите новую группу:", +"This will delete the selected VMs from the database":"Удалить выбранные ВМ и связанные с ними образы дисков из базы данных и хранилища образов", +"This will deploy the selected VMs on the chosen host":"Разместить выбранные ВМ на определенном узле", +"This will hold selected pending VMs from being deployed":"Приостановить процедуру размещения ВМ на узле", +"This will initiate the shutdown process in the selected VMs":"Запустить процесс выключения выбранных ВМ", +"This will live-migrate the selected VMs to the chosen host":"Перенести выбранные запущенные ВМ, не завершая их работы, с текущих узлов на выбранный", +"This will migrate the selected VMs to the chosen host":"Перенести выбранные остановленные ВМ с текущих узлов на выбранный", +"This will redeploy selected VMs (in UNKNOWN or BOOT state)":"Повторно выполнить процедуру размещения выбранных ВМ, находящихся в состоянии UNKNOWN или BOOT, на узле", +"This will release held machines":"Продолжить ранее приостановленное размещение ВМ на узле", +"This will resubmits VMs to PENDING state":"Повторно выполнить попытку размещения выбранных ВМ на одном из доступных узлов системы виртуализации (перевод в состояние PENDING)", +"This will resume selected stopped or suspended VMs":"Возобновить работу выбранных остановленных или приостановленных ВМ", +"This will stop selected VMs":"Остановить выбранные ВМ", +"This will suspend selected machines":"Приостановить выбранные ВМ", +"TIMESTAMP":"Время", +"TOTALCPU":"Ресурс ЦП", +"TOTALMEMORY":"Объем ОЗУ", +"Total Leases":"Суммарное количество адресов", +"Total VM count":"Количество виртуальных машин", +"Transfer Manager:":"Средство передачи:", +"Type of disk device to emulate.":"Тип эмулируемого дискового устройства", +"Type of disk device to emulate: ide, scsi":"Тип эмулируемого дискового устройства: ide, scsi", +"Type of file system to be built. This can be any value understood by mkfs unix command.":"Тип создаваемой ФС. Может быть указан любой тип, который используется в unix-команде mkfs.", +"Type of the image, explained in detail in the following section. If omitted, the default value is the one defined in oned.conf (install default is OS).":"Тип. Если не указать тип образа, его значение будет считано из конфигурационного файла oned.conf (значение по умолчанию — «OS»).", +"Type":"Тип", +"USB":"USB", +//"USED":"", +"USEDCPU":"Использование ресурса ЦП", +"USEDMEMORY":"Используемый объем ОЗУ", +"USED_BY":"Экземпляров в использовании", +"Udp black ports:":"Запрещенные UPD-порты:", +"Udp firewall mode:":"UPD режим брандмауэра:", +"Udp white ports:":"Разрешенные UPD-порты:", +"Unpublish":"Отменить статус «Открытый»", +"Update a template":"Обновить шаблон", +"Update template":"Обновить шаблон", +"Update":"Обновить", +"Use":"Использовать", +"Used CPU (allocated)":"Использовано ОЗУ(реально)", +"Used CPU (real)":"Использовано ЦП(реально)", +"Used CPU":"Используется ЦП", +"Used Mem (allocated)":"Использовано ОЗУ(выделено)", +"Used Mem (real)":"Использовано ОЗУ(реально)", +"Used Memory":"Используется памяти", +"Useful for power management, for example, normally required for graceful shutdown to work":"Требуется для корректного завершения работы ВМ средствами системы виртуализации", +"User chgrp":"Изменение группы", +"User create":"Пользователь создан", +"User delete":"Пользователь удален", +"User name and password must be filled in":"Необходимо указать и имя пользователя, и пароль", +"User":"Пользователь", +"Username:":"Имя пользователя:", +"Users":"Пользователи", +"VCPU":"Кол-во вирт. ЦП", +"VCPU:":"Кол-во вирт. ЦП:", +"VID":"№ ВМ", +"VM Instance":"Экземпляр ВМ", +"VM Instances (":"Экземпляры ВМ (", +"VM MAD":"Модуль ср-ва виртуализации", +"VM Name:":"Название ВМ:", +"VM Network stats":"Статистика виртуальных сетей", +"VM Save As":"ВМ сохранить как", +"VM Template":"Шаблон ВМ", +"VM Templates (total/public)":"Шаблоны ВМ (всего/из них открытых)", +"VM Templates":"Шаблоны ВМ", +"VM information":"Информация о ВМ", +"VM log":"Журнал ВМ", +"VM template":"Шаблон ВМ", +"VM":"ВМ", +"VMID":"№ ВМ", +"VNC Access":"Доступ по VNC", +"VNC Disabled":"VNC недоступно", +"VNC Session":"VNC сессия", +"VNC connection":"VNC соединение", +"VNC":"VNC", +"Value of the context variable":"Значение контекстной переменной", +"Value of the custom variable":"Значение пользовательской перменной", +"Value:":"Значение:", +"Virtio (KVM)":"Virtio (KVM)", +"Virtio":"Virtio", +"Virtual Machine information":"Информация о виртуальной машине", +"Virtual Machines":"Вирт. машины", +"Virtual Network name missing!":"Отсутствует название виртуальной сети!", +"Virtual Network template":"Шаблон виртуальной сети", +"Virtual Networks (total/public)":"Виртуальные сети (всего/из них открытых)", +"Virtual Networks":"Вирт. сети", +"Virtual Network":"Виртуальная сеть", +"Virtual Network information":"Информация о виртуальной сети", +"Virtual network information":"Информация о виртуальной сети", +"Virtual network template":"Шаблон виртуальной сети", +"Virtualization Manager:":"Средство виртуализации:", +"Wizard KVM":"Шаблон KVM", +"Wizard VMware":"Шаблон VMware", +"Wizard XEN":"Шаблон XEN", +"Wizard":"Мастер настройки", +"Write the Virtual Machine template here":"Отредактируйте параметры шаблона ВМ вручную", +"Write the Virtual Network template here":"Отредактируйте параметры шаблона вирт. сети вручную", +"Write the image template here":"Отредактируйте параметры шаблона образа ВМ вручную", +"XEN":"XEN", +"Xen templates must specify a boot method":"В шаблон Xen необходимо указывать метод загрузки", +"YES":"да", +"Yes":"Да", +"You have not selected a template":"Вы не выбрали шаблон", +"You have to confirm this action.":"Необходимо подтвердить данную операцию.", +"You need to select something.":"Вы должны что-нибудь выбрать.", +"active":"активных", +"are mandatory":"обязательные", +"cdrom":"cdrom", +"cpu_usage":"использование", +"disk id :":"диск №: ", +"error":"ошибок", +"failed":"дефектных", +"fd":"fd", +"hd":"hd", +"id":"№", +"max_cpu":"максимально", +"max_mem":"максимально", +"mem_usage":"использование", +"net_rx":"принято", +"net_tx":"отправлено", +"network":"network", +"no":"никак нет", +"running":"запущенных", +"total":"всего", +"used_cpu":"использовано", +"used_mem":"использовано", +"yes":"да" +}; diff --git a/src/sunstone/public/locale/ru/ru_datatable.txt b/src/sunstone/public/locale/ru/ru_datatable.txt new file mode 100644 index 0000000000..a8d9b48c9b --- /dev/null +++ b/src/sunstone/public/locale/ru/ru_datatable.txt @@ -0,0 +1,17 @@ +{ + "sProcessing": "Ждите. Выполняется обработка...", + "sLengthMenu": "Показывать _MENU_ элементов списка", + "sZeroRecords": "Список пуст", + "sInfo": "Показаны элементы списка с _START_ по _END_ из _TOTAL_", + "sInfoEmpty": "Список пуст", + "sInfoFiltered": "(отфильтровано из _MAX_ элементов списка)", + "sInfoPostFix": "", + "sSearch": "Поиск:", + "sUrl": "", + "oPaginate": { + "sFirst": "Первая", + "sPrevious": "Предыдущая", + "sNext": "Следующая", + "sLast": "Последняя" + } +} \ No newline at end of file diff --git a/src/sunstone/sunstone-server.rb b/src/sunstone/sunstone-server.rb index e901caa82c..3be88d9db6 100755 --- a/src/sunstone/sunstone-server.rb +++ b/src/sunstone/sunstone-server.rb @@ -114,6 +114,12 @@ helpers do session[:ip] = request.ip session[:remember] = params[:remember] + if user['TEMPLATE/LANG'] + session[:lang] = user['TEMPLATE/LANG'] + else + session[:lang] = settings.config[:lang] + end + if params[:remember] env['rack.session.options'][:expire_after] = 30*60*60*24 end @@ -209,12 +215,26 @@ get '/config' do @SunstoneServer.get_configuration(session[:user_id]) end +post '/config' do + begin + body = JSON.parse(request.body.read) + rescue + [500, OpenNebula::Error.new(msg).to_json] + end + + body.each do | key,value | + case key + when "lang" then session[:lang]=value + end + end +end + get '/vm/:id/log' do @SunstoneServer.get_vm_log(params[:id]) end ############################################################################## -# Logs +# Monitoring ############################################################################## get '/:resource/monitor' do diff --git a/src/sunstone/views/index.erb b/src/sunstone/views/index.erb index 9140aafa6e..3e7d46cdda 100644 --- a/src/sunstone/views/index.erb +++ b/src/sunstone/views/index.erb @@ -2,7 +2,7 @@ OpenNebula Sunstone: Cloud Operations Center - + @@ -20,6 +20,13 @@ + + +<%if session[:lang]%> + +<%end%> + + @@ -42,6 +49,7 @@ +
            @@ -60,6 +68,14 @@
            Welcome  | Sign Out
            +
            +
            + +
            +