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= '
'); + 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
+
+
+ +
+