[pve-devel] [PATCH 1/2] Modifications for i18n

Koichi MATSUMOTO mzch at me.com
Tue Dec 6 12:01:34 CET 2011


From: Koichi MATSUMOTO <mzch at mac.com>

Modifications for i18n
---
 po/messages.pot                         | 2352 +++++++++++++++++++++++++++----
 www/manager/StateProvider.js            |    4 +-
 www/manager/Utils.js                    |  177 ++--
 www/manager/VNCConsole.js               |   18 +-
 www/manager/Workspace.js                |    8 +-
 www/manager/data/DiffStore.js           |    4 +-
 www/manager/data/ResourceStore.js       |    6 +-
 www/manager/data/TimezoneStore.js       |    2 +-
 www/manager/data/UpdateQueue.js         |    2 +-
 www/manager/data/UpdateStore.js         |    2 +-
 www/manager/data/reader/JsonObject.js   |    2 +-
 www/manager/dc/ACLView.js               |    8 +-
 www/manager/dc/AuthEdit.js              |   28 +-
 www/manager/dc/AuthView.js              |   20 +-
 www/manager/dc/Backup.js                |   74 +-
 www/manager/dc/GroupEdit.js             |    6 +-
 www/manager/dc/GroupView.js             |   14 +-
 www/manager/dc/Log.js                   |    2 +-
 www/manager/dc/OptionView.js            |   32 +-
 www/manager/dc/RoleView.js              |    4 +-
 www/manager/dc/StorageView.js           |   12 +-
 www/manager/dc/Tasks.js                 |    4 +-
 www/manager/dc/UserEdit.js              |   24 +-
 www/manager/dc/UserView.js              |   26 +-
 www/manager/form/BackupModeSelector.js  |    6 +-
 www/manager/form/BondModeSelector.js    |   14 +-
 www/manager/form/Boolean.js             |    6 +-
 www/manager/form/BridgeSelector.js      |    4 +-
 www/manager/form/BusTypeSelector.js     |    6 +-
 www/manager/form/CPUModelSelector.js    |   28 +-
 www/manager/form/CacheTypeSelector.js   |   10 +-
 www/manager/form/ControllerSelector.js  |    6 +-
 www/manager/form/DayOfWeekSelector.js   |   14 +-
 www/manager/form/DiskFormatSelector.js  |    6 +-
 www/manager/form/FileSelector.js        |    8 +-
 www/manager/form/NetworkCardSelector.js |    6 +-
 www/manager/form/NodeSelector.js        |   10 +-
 www/manager/form/RRDTypeSelector.js     |   20 +-
 www/manager/form/RealmComboBox.js       |    4 +-
 www/manager/form/StorageSelector.js     |   10 +-
 www/manager/form/VMIDSelector.js        |    4 +-
 www/manager/grid/BackupView.js          |   27 +-
 www/manager/grid/ObjectGrid.js          |    6 +-
 www/manager/node/BCFailCnt.js           |    4 +-
 www/manager/node/Config.js              |   12 +-
 www/manager/node/DNSEdit.js             |    8 +-
 www/manager/node/DNSView.js             |   14 +-
 www/manager/node/NetworkEdit.js         |   36 +-
 www/manager/node/NetworkView.js         |   56 +-
 www/manager/node/ServiceView.js         |   20 +-
 www/manager/node/StatusView.js          |   28 +-
 www/manager/node/Summary.js             |   14 +-
 www/manager/node/Tasks.js               |    6 +-
 www/manager/node/TimeEdit.js            |    4 +-
 www/manager/node/TimeView.js            |    8 +-
 www/manager/openvz/BeanCounterGrid.js   |   14 +-
 www/manager/openvz/CmdMenu.js           |    6 +-
 www/manager/openvz/Config.js            |    4 +-
 www/manager/openvz/CreateWizard.js      |   48 +-
 www/manager/openvz/DNS.js               |   24 +-
 www/manager/openvz/Network.js           |   68 +-
 www/manager/openvz/Options.js           |   36 +-
 www/manager/openvz/RessourceEdit.js     |   12 +-
 www/manager/openvz/RessourceView.js     |   14 +-
 www/manager/openvz/StatusView.js        |   26 +-
 www/manager/openvz/Summary.js           |   18 +-
 www/manager/panel/NotesView.js          |   10 +-
 www/manager/panel/RRDView.js            |    4 +-
 www/manager/panel/StatusPanel.js        |    2 +-
 www/manager/qemu/BootOrderEdit.js       |    8 +-
 www/manager/qemu/CDEdit.js              |   18 +-
 www/manager/qemu/CmdMenu.js             |    6 +-
 www/manager/qemu/Config.js              |    8 +-
 www/manager/qemu/CreateWizard.js        |   28 +-
 www/manager/qemu/DisplayEdit.js         |    5 +-
 www/manager/qemu/HDEdit.js              |   26 +-
 www/manager/qemu/HardwareView.js        |   51 +-
 www/manager/qemu/KeyboardEdit.js        |    4 +-
 www/manager/qemu/MemoryEdit.js          |    6 +-
 www/manager/qemu/Monitor.js             |    6 +-
 www/manager/qemu/NetworkEdit.js         |   22 +-
 www/manager/qemu/OSTypeEdit.js          |    6 +-
 www/manager/qemu/Options.js             |   68 +-
 www/manager/qemu/ProcessorEdit.js       |   12 +-
 www/manager/qemu/SendKeyMenu.js         |   34 +-
 www/manager/qemu/StatusView.js          |   20 +-
 www/manager/qemu/Summary.js             |   18 +-
 www/manager/storage/Browser.js          |    4 +-
 www/manager/storage/ContentView.js      |   60 +-
 www/manager/storage/DirEdit.js          |    2 +-
 www/manager/storage/IScsiEdit.js        |    8 +-
 www/manager/storage/LVMEdit.js          |    4 +-
 www/manager/storage/NFSEdit.js          |    6 +-
 www/manager/storage/StatusView.js       |   20 +-
 www/manager/storage/Summary.js          |    8 +-
 www/manager/window/Backup.js            |   16 +-
 www/manager/window/Edit.js              |    4 +-
 www/manager/window/Migrate.js           |   16 +-
 www/manager/window/NotesEdit.js         |    2 +-
 www/manager/window/Restore.js           |   21 +-
 www/manager/window/TaskViewer.js        |   26 +-
 www/manager/window/Wizard.js            |    8 +-
 102 files changed, 2981 insertions(+), 1092 deletions(-)

diff --git a/po/messages.pot b/po/messages.pot
index b907407..e5eaa17 100644
--- a/po/messages.pot
+++ b/po/messages.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pve-manager 2.0\n"
 "Report-Msgid-Bugs-To: <support at proxmox.com>\n"
-"POT-Creation-Date: Fri Nov 25 12:30:05 2011\n"
+"POT-Creation-Date: Mon Dec  5 22:00:55 2011\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <support at proxmox.com>\n"
@@ -16,499 +16,2107 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../www/manager/dc/StorageView.js:114
+#: ../www/manager/dc/Backup.js:426 ../www/manager/dc/Backup.js:457
+msgid "-- all --"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:117
+msgid "-- any --"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:73
+msgid "192.168.2.23,ldap.company.net"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:10
+msgid "486"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:13
+msgid "802.3ad"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:97 ../www/manager/qemu/Options.js:102
+msgid "ACPI support"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:88
+msgid "Abort"
+msgstr ""
+
+#: ../www/manager/form/BridgeSelector.js:50 ../www/manager/storage/StatusView.js:25 ../www/manager/node/NetworkView.js:213
+msgid "Active"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:65
+msgid "Active Directory Server"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:249 ../www/manager/openvz/Network.js:345 ../www/manager/dc/StorageView.js:114 ../www/manager/dc/Backup.js:406
 msgid "Add"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:125 ../www/manager/storage/LVMEdit.js:185 ../www/manager/storage/DirEdit.js:72 ../www/manager/storage/NFSEdit.js:130
+#: ../www/manager/qemu/HDEdit.js:198
+msgid "Add (previously unused) Harddisk"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:169
+msgid "Add CD/DVD Drive"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:200
+msgid "Add Harddisk"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:131
+msgid "Add IP address (venet)"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:45
+msgid "Add ethernet device (veth)"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:161
+msgid "Add network device"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:185 ../www/manager/storage/DirEdit.js:72 ../www/manager/storage/IScsiEdit.js:125 ../www/manager/storage/NFSEdit.js:130
 msgid "All"
 msgstr ""
 
+#: ../www/manager/dc/Backup.js:30
+msgid "All VMs"
+msgstr ""
+
 #: ../www/manager/Utils.js:60
 msgid "Allowed characters"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:80 ../www/manager/openvz/Config.js:72
-msgid "Are you sure you want to remove VM {0}? This will permanently erase all VM data."
+#: ../www/manager/Utils.js:122
+msgid "Arabic"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:70
-msgid "Are you sure you want to remove storage {0}?"
+#: ../www/manager/dc/Backup.js:363
+msgid "Are you sure you want to delete this backup job?"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:49
-msgid "Authentication"
+#: ../www/manager/storage/ContentView.js:261
+msgid "Are you sure you want to delete volume {0}"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:24 ../www/manager/qemu/Config.js:131 ../www/manager/openvz/Config.js:140
-msgid "Backup"
+#: ../www/manager/grid/BackupView.js:120
+msgid "Are you sure you want to delete {0}? This will permanently erase all data."
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:149
-msgid "Base storage"
+#: ../www/manager/StateProvider.js:156
+msgid "Are you sure you want to navigate away from this page?"
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:142
-msgid "Base volume"
+#: ../www/manager/dc/GroupView.js:36
+msgid "Are you sure you want to permanently delete the group: {0}"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:132
-msgid "CPU usage"
+#: ../www/manager/dc/UserView.js:39
+msgid "Are you sure you want to permanently delete the user: {0}"
 msgstr ""
 
-#: ../www/manager/panel/StatusPanel.js:41
-msgid "Cluster log"
+#: ../www/manager/dc/AuthView.js:62
+msgid "Are you sure you want to permanently the authentication realm: {0}"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:72 ../www/manager/qemu/CmdMenu.js:41 ../www/manager/button/Button.js:40 ../www/manager/VNCConsole.js:240 ../www/manager/VNCConsole.js:268 ../www/manager/VNCConsole.js:280 ../www/manager/VNCConsole.js:292 ../www/manager/VNCConsole.js:387 ../www/manager/VNCConsole.js:399 ../www/manager/openvz/CmdMenu.js:41
-msgid "Confirm"
+#: ../www/manager/openvz/Network.js:256
+msgid "Are you sure you want to remove IP address {0}"
 msgstr ""
 
-#: ../www/manager/Utils.js:276 ../www/manager/Utils.js:327 ../www/manager/Utils.js:329 ../www/manager/Utils.js:331 ../www/manager/Utils.js:333
-msgid "Connection error"
+#: ../www/manager/qemu/Config.js:80 ../www/manager/openvz/Config.js:72
+msgid "Are you sure you want to remove VM {0}? This will permanently erase all VM data."
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:94 ../www/manager/qemu/CmdMenu.js:51 ../www/manager/VNCConsole.js:321 ../www/manager/VNCConsole.js:422 ../www/manager/openvz/Config.js:86 ../www/manager/openvz/CmdMenu.js:51
-msgid "Console"
+#: ../www/manager/openvz/Network.js:258
+msgid "Are you sure you want to remove device {0}"
 msgstr ""
 
-#: ../www/manager/openvz/Config.js:96
-msgid "Container {0} on node {1}"
+#: ../www/manager/qemu/HardwareView.js:202
+msgid "Are you sure you want to remove image {0}? This will permanently erase all image data."
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:174 ../www/manager/storage/DirEdit.js:46 ../www/manager/storage/Browser.js:30
-msgid "Content"
+#: ../www/manager/dc/StorageView.js:70
+msgid "Are you sure you want to remove storage {0}?"
 msgstr ""
 
-#: ../www/manager/window/Edit.js:166
-msgid "Create"
+#: ../www/manager/openvz/Network.js:260
+msgid "Are you sure you want to remove this item"
 msgstr ""
 
-#: ../www/manager/Workspace.js:333
-msgid "Create CT"
+#: ../www/manager/qemu/HardwareView.js:200
+msgid "Are you sure you want to remove: {0}"
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:233
-msgid "Create LVM storage"
+#: ../www/manager/window/Restore.js:101
+msgid "Are you sure you want to restore VM {0}? This will permanently erase current VM data."
 msgstr ""
 
-#: ../www/manager/storage/NFSEdit.js:172
-msgid "Create NFS storage"
+#: ../www/manager/dc/Config.js:49
+msgid "Authentication"
 msgstr ""
 
-#: ../www/manager/Workspace.js:322
-msgid "Create VM"
+#: ../www/manager/node/NetworkEdit.js:39 ../www/manager/node/NetworkView.js:223
+msgid "Autostart"
 msgstr ""
 
-#: ../www/manager/storage/DirEdit.js:107
-msgid "Create directory storage"
+#: ../www/manager/form/StorageSelector.js:64 ../www/manager/storage/StatusView.js:60
+msgid "Avail"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:173
-msgid "Create iSCSI storage"
+#: ../www/manager/window/Wizard.js:73
+msgid "Back"
 msgstr ""
 
-#: ../www/manager/tree/ResourceTree.js:185 ../www/manager/dc/Config.js:9
-msgid "Datacenter"
+#: ../www/manager/qemu/Config.js:131 ../www/manager/openvz/Config.js:140 ../www/manager/dc/Config.js:24 ../www/manager/Utils.js:395
+msgid "Backup"
 msgstr ""
 
-#: ../www/manager/Utils.js:546
-msgid "Default"
+#: ../www/manager/window/Backup.js:90
+msgid "Backup CT {0}"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:61 ../www/manager/node/Tasks.js:136 ../www/manager/dc/Tasks.js:91
-msgid "Description"
+#: ../www/manager/window/Backup.js:91
+msgid "Backup VM {0}"
 msgstr ""
 
-#: ../www/manager/storage/DirEdit.js:38
-msgid "Directory"
+#: ../www/manager/grid/BackupView.js:81
+msgid "Backup now"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:109
-msgid "Disk size"
+#: ../www/manager/Utils.js:571
+msgid "Backups"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:102
-msgid "Disk usage"
+#: ../www/manager/dc/AuthEdit.js:34
+msgid "Base Domain Name"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:13 ../www/manager/dc/OptionView.js:74
-msgid "Do not use any proxy"
+#: ../www/manager/storage/LVMEdit.js:149
+msgid "Base storage"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:64 ../www/manager/VNCConsole.js:267
-msgid "Do you really want to reset VM {0}?"
+#: ../www/manager/storage/LVMEdit.js:142
+msgid "Base volume"
 msgstr ""
 
-#: ../www/manager/node/Config.js:32
-msgid "Do you really want to restart node {0}?"
+#: ../www/manager/node/NetworkView.js:158
+msgid "Bond"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:72 ../www/manager/qemu/CmdMenu.js:40 ../www/manager/VNCConsole.js:279 ../www/manager/VNCConsole.js:398 ../www/manager/openvz/Config.js:52 ../www/manager/openvz/CmdMenu.js:40
-msgid "Do you really want to shutdown VM {0}?"
+#: ../www/manager/qemu/BootOrderEdit.js:186 ../www/manager/qemu/Options.js:64
+msgid "Boot order"
 msgstr ""
 
-#: ../www/manager/node/Config.js:40
-msgid "Do you really want to shutdown node {0}?"
+#: ../www/manager/form/BridgeSelector.js:44 ../www/manager/qemu/NetworkEdit.js:63 ../www/manager/openvz/Network.js:79 ../www/manager/openvz/Network.js:396 ../www/manager/openvz/CreateWizard.js:54 ../www/manager/node/NetworkView.js:139
+msgid "Bridge"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:44 ../www/manager/VNCConsole.js:239 ../www/manager/VNCConsole.js:386 ../www/manager/openvz/Config.js:44
-msgid "Do you really want to stop VM {0}?"
+#: ../www/manager/node/NetworkEdit.js:49
+msgid "Bridge ports"
 msgstr ""
 
-#: ../www/manager/VNCConsole.js:291
-msgid "Do you really want to suspend VM {0}?"
+#: ../www/manager/qemu/NetworkEdit.js:76 ../www/manager/openvz/CreateWizard.js:180
+msgid "Bridged mode"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:54 ../www/manager/dc/OptionView.js:130
-msgid "Edit"
+#: ../www/manager/form/ControllerSelector.js:59
+msgid "Bus/Device"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:8
-msgid "Edit HTTP proxy settings"
+#: ../www/manager/qemu/Options.js:88
+msgid "CD-ROM"
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:235
-msgid "Edit LVM storage {0}"
+#: ../www/manager/qemu/HardwareView.js:265
+msgid "CD/DVD Drive"
 msgstr ""
 
-#: ../www/manager/storage/NFSEdit.js:174
-msgid "Edit NFS storage {0}"
+#: ../www/manager/qemu/CreateWizard.js:92
+msgid "CPU"
 msgstr ""
 
-#: ../www/manager/storage/DirEdit.js:109
-msgid "Edit directory storage {0}"
+#: ../www/manager/qemu/ProcessorEdit.js:49
+msgid "CPU type"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:175
-msgid "Edit iSCSI storage {0}"
+#: ../www/manager/openvz/Options.js:46 ../www/manager/openvz/Options.js:50 ../www/manager/openvz/Options.js:54
+msgid "CPU units"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:55
-msgid "Edit keyboard settings"
+#: ../www/manager/form/NodeSelector.js:54 ../www/manager/qemu/StatusView.js:45 ../www/manager/data/ResourceStore.js:132 ../www/manager/openvz/StatusView.js:67 ../www/manager/node/StatusView.js:37
+msgid "CPU usage"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:33
-msgid "Edit language settings"
+#: ../www/manager/qemu/Summary.js:62 ../www/manager/openvz/Summary.js:67 ../www/manager/node/Summary.js:40
+msgid "CPU usage %"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:200 ../www/manager/storage/IScsiEdit.js:135 ../www/manager/storage/LVMEdit.js:195 ../www/manager/storage/DirEdit.js:57 ../www/manager/storage/NFSEdit.js:140
-msgid "Enable"
+#: ../www/manager/openvz/RessourceEdit.js:49 ../www/manager/node/StatusView.js:36
+msgid "CPUs"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:118 ../www/manager/dc/Tasks.js:69
-msgid "End Time"
+#: ../www/manager/qemu/HDEdit.js:159
+msgid "Cache"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:90
-msgid "Enter your password"
+#: ../www/manager/form/StorageSelector.js:70
+msgid "Capacity"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:67
-msgid "Enter your user name"
+#: ../www/manager/qemu/CDEdit.js:170
+msgid "Change CD/DVD settings ({0})"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:17 ../www/manager/window/Edit.js:87 ../www/manager/window/Edit.js:124
-msgid "Error"
+#: ../www/manager/Utils.js:160
+msgid "Cirrus Logic GD5446"
 msgstr ""
 
-#: ../www/manager/Utils.js:33 ../www/manager/Utils.js:40 ../www/manager/Utils.js:65
-msgid "Example"
+#: ../www/manager/panel/StatusPanel.js:41
+msgid "Cluster log"
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:40
-msgid "Existing volume groups"
+#: ../www/manager/dc/AuthEdit.js:48 ../www/manager/dc/AuthView.js:110 ../www/manager/dc/GroupEdit.js:35 ../www/manager/dc/UserView.js:176 ../www/manager/dc/UserEdit.js:93 ../www/manager/dc/GroupView.js:90
+msgid "Comment"
 msgstr ""
 
-#: ../www/manager/form/ViewSelector.js:15
-msgid "Folder View"
+#: ../www/manager/window/Backup.js:50
+msgid "Compress"
 msgstr ""
 
-#: ../www/manager/Utils.js:273
-msgid "Form fields may not be submitted with invalid values"
+#: ../www/manager/dc/Backup.js:163
+msgid "Compression"
 msgstr ""
 
-#: ../www/manager/Utils.js:45 ../www/manager/Utils.js:50 ../www/manager/Utils.js:55
-msgid "Format"
+#: ../www/manager/qemu/CmdMenu.js:41 ../www/manager/qemu/CreateWizard.js:101 ../www/manager/openvz/CmdMenu.js:41 ../www/manager/openvz/CreateWizard.js:248 ../www/manager/VNCConsole.js:240 ../www/manager/VNCConsole.js:268 ../www/manager/VNCConsole.js:280 ../www/manager/VNCConsole.js:292 ../www/manager/VNCConsole.js:387 ../www/manager/VNCConsole.js:399 ../www/manager/dc/StorageView.js:72 ../www/manager/button/Button.js:40
+msgid "Confirm"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:91
-msgid "GUI language"
+#: ../www/manager/openvz/CreateWizard.js:120
+msgid "Confirm password"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:34
-msgid "Groups"
+#: ../www/manager/window/Restore.js:102
+msgid "Confirmation"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:116
-msgid "Hardware"
+#: ../www/manager/Utils.js:277 ../www/manager/Utils.js:328 ../www/manager/Utils.js:330 ../www/manager/Utils.js:332 ../www/manager/Utils.js:334
+msgid "Connection error"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:85
-msgid "Keyboard"
+#: ../www/manager/qemu/CmdMenu.js:51 ../www/manager/qemu/Config.js:94 ../www/manager/openvz/CmdMenu.js:51 ../www/manager/openvz/Config.js:86 ../www/manager/VNCConsole.js:321 ../www/manager/VNCConsole.js:422
+msgid "Console"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:60
-msgid "Keyboard Layout"
+#: ../www/manager/node/BCFailCnt.js:37
+msgid "Container"
 msgstr ""
 
-#: ../www/manager/dc/OptionView.js:38 ../www/manager/window/LoginWindow.js:105
-msgid "Language"
+#: ../www/manager/openvz/DNS.js:27
+msgid "Container Hostname"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:121
-msgid "Login"
+#: ../www/manager/openvz/Config.js:96
+msgid "Container {0} on node {1}"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:18
-msgid "Login failed. Please try again"
+#: ../www/manager/Utils.js:577
+msgid "Containers"
 msgstr ""
 
-#: ../www/manager/Workspace.js:308
-msgid "Logout"
+#: ../www/manager/storage/StatusView.js:30 ../www/manager/storage/DirEdit.js:46 ../www/manager/storage/Browser.js:30 ../www/manager/dc/StorageView.js:174
+msgid "Content"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:124
-msgid "Memory size"
+#: ../www/manager/storage/ContentView.js:48
+msgid "Content type"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:117
-msgid "Memory usage"
+#: ../www/manager/qemu/ProcessorEdit.js:31
+msgid "Cores"
 msgstr ""
 
-#: ../www/manager/dc/Log.js:76
-msgid "Message"
+#: ../www/manager/dc/AuthView.js:23 ../www/manager/dc/UserView.js:97 ../www/manager/dc/GroupView.js:58 ../www/manager/window/Edit.js:166 ../www/manager/node/NetworkView.js:135
+msgid "Create"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:51 ../www/manager/VNCConsole.js:249 ../www/manager/openvz/Config.js:59
-msgid "Migrate"
+#: ../www/manager/dc/AuthEdit.js:112
+msgid "Create Auth"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:126
-msgid "Monitor"
+#: ../www/manager/dc/Backup.js:273
+msgid "Create Backup Job"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:96
-msgid "Name"
+#: ../www/manager/node/NetworkEdit.js:27
+msgid "Create Bond"
 msgstr ""
 
-#: ../www/manager/node/Config.js:76 ../www/manager/openvz/Config.js:113
-msgid "Network"
+#: ../www/manager/node/NetworkEdit.js:24
+msgid "Create Bridge"
 msgstr ""
 
-#: ../www/manager/Utils.js:545
-msgid "No"
+#: ../www/manager/Workspace.js:333
+msgid "Create CT"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:126 ../www/manager/storage/LVMEdit.js:186 ../www/manager/storage/DirEdit.js:73 ../www/manager/storage/NFSEdit.js:131
-msgid "No restrictions"
+#: ../www/manager/Utils.js:386
+msgid "Create CT {0}"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:153 ../www/manager/node/Config.js:60 ../www/manager/node/Tasks.js:126 ../www/manager/dc/Tasks.js:81 ../www/manager/dc/Log.js:50
-msgid "Node"
+#: ../www/manager/dc/GroupEdit.js:22
+msgid "Create Group"
 msgstr ""
 
-#: ../www/manager/tree/ResourceTree.js:13
-msgid "Node list"
+#: ../www/manager/storage/LVMEdit.js:233
+msgid "Create LVM storage"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:124 ../www/manager/storage/LVMEdit.js:184 ../www/manager/storage/DirEdit.js:71 ../www/manager/storage/NFSEdit.js:129
-msgid "Nodes"
+#: ../www/manager/storage/NFSEdit.js:172
+msgid "Create NFS storage"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:48
-msgid "Online"
+#: ../www/manager/dc/UserEdit.js:131
+msgid "Create User"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:94
-msgid "Only Errors"
+#: ../www/manager/Workspace.js:322
+msgid "Create VM"
 msgstr ""
 
-#: ../www/manager/tree/ResourceTree.js:25
-msgid "OpenVZ containers"
+#: ../www/manager/Utils.js:376
+msgid "Create VM {0}"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:14 ../www/manager/qemu/Config.js:121 ../www/manager/openvz/Config.js:123
-msgid "Options"
+#: ../www/manager/storage/DirEdit.js:107
+msgid "Create directory storage"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:88
-msgid "Password"
+#: ../www/manager/storage/IScsiEdit.js:173
+msgid "Create iSCSI storage"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:39 ../www/manager/storage/Browser.js:34 ../www/manager/qemu/Config.js:136 ../www/manager/openvz/Config.js:145
-msgid "Permissions"
+#: ../www/manager/openvz/CreateWizard.js:62
+msgid "Create new container"
 msgstr ""
 
-#: ../www/manager/Utils.js:294 ../www/manager/window/LoginWindow.js:12 ../www/manager/window/LoginWindow.js:113
-msgid "Please wait..."
+#: ../www/manager/qemu/CreateWizard.js:43
+msgid "Create new virtual machine"
 msgstr ""
 
-#: ../www/manager/window/LoginWindow.js:46
-msgid "Proxmox VE Login"
+#: ../www/manager/Utils.js:136
+msgid "Croatia"
 msgstr ""
 
-#: ../www/manager/VNCConsole.js:308 ../www/manager/VNCConsole.js:409 ../www/manager/VNCConsole.js:459
-msgid "Refresh"
+#: ../www/manager/qemu/SendKeyMenu.js:39
+msgid "Ctrl-Alt-Backspace"
 msgstr ""
 
-#: ../www/manager/VNCConsole.js:315 ../www/manager/VNCConsole.js:416 ../www/manager/VNCConsole.js:466
-msgid "Reload"
+#: ../www/manager/qemu/SendKeyMenu.js:34
+msgid "Ctrl-Alt-Delete"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:60 ../www/manager/qemu/Config.js:79 ../www/manager/openvz/Config.js:71
-msgid "Remove"
+#: ../www/manager/qemu/SendKeyMenu.js:44
+msgid "Ctrl-Alt-F1"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:63 ../www/manager/VNCConsole.js:265
-msgid "Reset"
+#: ../www/manager/qemu/SendKeyMenu.js:89
+msgid "Ctrl-Alt-F10"
 msgstr ""
 
-#: ../www/manager/openvz/Config.js:108
-msgid "Resources"
+#: ../www/manager/qemu/SendKeyMenu.js:94
+msgid "Ctrl-Alt-F11"
 msgstr ""
 
-#: ../www/manager/node/Config.js:31
-msgid "Restart"
+#: ../www/manager/qemu/SendKeyMenu.js:99
+msgid "Ctrl-Alt-F12"
 msgstr ""
 
-#: ../www/manager/VNCConsole.js:301
-msgid "Resume"
+#: ../www/manager/qemu/SendKeyMenu.js:49
+msgid "Ctrl-Alt-F2"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:44
-msgid "Roles"
+#: ../www/manager/qemu/SendKeyMenu.js:54
+msgid "Ctrl-Alt-F3"
 msgstr ""
 
-#: ../www/manager/grid/ResourceGrid.js:177 ../www/manager/grid/ResourceGrid.js:181
-msgid "Search"
+#: ../www/manager/qemu/SendKeyMenu.js:59
+msgid "Ctrl-Alt-F4"
 msgstr ""
 
-#: ../www/manager/storage/NFSEdit.js:95
-msgid "Server"
+#: ../www/manager/qemu/SendKeyMenu.js:64
+msgid "Ctrl-Alt-F5"
 msgstr ""
 
-#: ../www/manager/form/ViewSelector.js:11
-msgid "Server View"
+#: ../www/manager/qemu/SendKeyMenu.js:69
+msgid "Ctrl-Alt-F6"
 msgstr ""
 
-#: ../www/manager/dc/Log.js:55
-msgid "Service"
+#: ../www/manager/qemu/SendKeyMenu.js:74
+msgid "Ctrl-Alt-F7"
 msgstr ""
 
-#: ../www/manager/node/Config.js:71
-msgid "Services"
+#: ../www/manager/qemu/SendKeyMenu.js:79
+msgid "Ctrl-Alt-F8"
 msgstr ""
 
-#: ../www/manager/dc/Log.js:70
-msgid "Severity"
+#: ../www/manager/qemu/SendKeyMenu.js:84
+msgid "Ctrl-Alt-F9"
 msgstr ""
 
-#: ../www/manager/dc/StorageView.js:193 ../www/manager/storage/LVMEdit.js:201 ../www/manager/storage/DirEdit.js:63
-msgid "Shared"
+#: ../www/manager/openvz/CreateWizard.js:204 ../www/manager/node/Config.js:81
+msgid "DNS"
 msgstr ""
 
-#: ../www/manager/node/Config.js:47 ../www/manager/VNCConsole.js:470
-msgid "Shell"
+#: ../www/manager/openvz/CreateWizard.js:210 ../www/manager/openvz/DNS.js:39 ../www/manager/openvz/DNS.js:43 ../www/manager/openvz/DNS.js:47
+msgid "DNS domain"
 msgstr ""
 
-#: ../www/manager/node/Config.js:39 ../www/manager/qemu/Config.js:71 ../www/manager/qemu/CmdMenu.js:37 ../www/manager/VNCConsole.js:277 ../www/manager/VNCConsole.js:396 ../www/manager/openvz/Config.js:51 ../www/manager/openvz/CmdMenu.js:37
-msgid "Shutdown"
+#: ../www/manager/openvz/CreateWizard.js:229
+msgid "DNS server 1"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:36 ../www/manager/qemu/CmdMenu.js:30 ../www/manager/VNCConsole.js:231 ../www/manager/VNCConsole.js:378 ../www/manager/openvz/Config.js:36 ../www/manager/openvz/CmdMenu.js:30
-msgid "Start"
+#: ../www/manager/openvz/CreateWizard.js:238
+msgid "DNS server 2"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:110 ../www/manager/dc/Tasks.js:61
-msgid "Start Time"
+#: ../www/manager/openvz/DNS.js:53 ../www/manager/openvz/DNS.js:57 ../www/manager/openvz/DNS.js:61
+msgid "DNS servers"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:142 ../www/manager/dc/Tasks.js:97
-msgid "Status"
+#: ../www/manager/Utils.js:123
+msgid "Danish"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:43 ../www/manager/VNCConsole.js:237 ../www/manager/VNCConsole.js:384 ../www/manager/openvz/Config.js:43
-msgid "Stop"
+#: ../www/manager/node/NetworkView.js:116 ../www/manager/node/ServiceView.js:112
+msgid "Data load error"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:160 ../www/manager/dc/Config.js:19
-msgid "Storage"
+#: ../www/manager/tree/ResourceTree.js:185 ../www/manager/dc/Config.js:9
+msgid "Datacenter"
 msgstr ""
 
-#: ../www/manager/form/ViewSelector.js:19
-msgid "Storage View"
+#: ../www/manager/form/RRDTypeSelector.js:17
+msgid "Day (average)"
 msgstr ""
 
-#: ../www/manager/tree/ResourceTree.js:17
-msgid "Storage list"
+#: ../www/manager/form/RRDTypeSelector.js:18
+msgid "Day (max)"
 msgstr ""
 
-#: ../www/manager/storage/Browser.js:19
-msgid "Storage {0} on node {1}"
+#: ../www/manager/dc/Backup.js:139 ../www/manager/dc/Backup.js:430
+msgid "Day of week"
 msgstr ""
 
-#: ../www/manager/Utils.js:247
-msgid "Successful"
+#: ../www/manager/form/Boolean.js:10 ../www/manager/Utils.js:165 ../www/manager/Utils.js:547
+msgid "Default"
 msgstr ""
 
-#: ../www/manager/node/Config.js:66 ../www/manager/storage/Browser.js:24 ../www/manager/qemu/Config.js:111 ../www/manager/openvz/Config.js:103
-msgid "Summary"
+#: ../www/manager/Utils.js:192
+msgid "Default (English)"
 msgstr ""
 
-#: ../www/manager/VNCConsole.js:289
-msgid "Suspend"
+#: ../www/manager/form/CacheTypeSelector.js:9
+msgid "Default (no cache)"
 msgstr ""
 
-#: ../www/manager/panel/StatusPanel.js:36
-msgid "Tasks"
+#: ../www/manager/form/CPUModelSelector.js:9
+msgid "Default (qemu64)"
 msgstr ""
 
-#: ../www/manager/node/Config.js:86 ../www/manager/dc/Log.js:42
-msgid "Time"
+#: ../www/manager/dc/AuthEdit.js:54
+msgid "Default Realm"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:33 ../www/manager/dc/StorageView.js:167
-msgid "Type"
+#: ../www/manager/storage/ContentView.js:257 ../www/manager/dc/AuthView.js:50 ../www/manager/dc/UserView.js:27 ../www/manager/dc/GroupView.js:26 ../www/manager/grid/BackupView.js:116 ../www/manager/node/NetworkView.js:79
+msgid "Delete"
 msgstr ""
 
-#: ../www/manager/Utils.js:250
-msgid "Unknown error"
+#: ../www/manager/qemu/HardwareView.js:205 ../www/manager/openvz/Network.js:263 ../www/manager/dc/AuthView.js:63 ../www/manager/dc/UserView.js:40 ../www/manager/dc/GroupView.js:37 ../www/manager/dc/Backup.js:365
+msgid "Deletion Confirmation"
 msgstr ""
 
-#: ../www/manager/data/ResourceStore.js:146
-msgid "Uptime"
+#: ../www/manager/data/ResourceStore.js:61 ../www/manager/dc/Tasks.js:91 ../www/manager/node/Tasks.js:136 ../www/manager/node/ServiceView.js:137
+msgid "Description"
 msgstr ""
 
-#: ../www/manager/storage/IScsiEdit.js:141
-msgid "Use LUNs directly"
+#: ../www/manager/Utils.js:388
+msgid "Destroy CT {0}"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:82 ../www/manager/node/Tasks.js:131 ../www/manager/dc/Tasks.js:86 ../www/manager/dc/Log.js:65 ../www/manager/window/LoginWindow.js:65
-msgid "User name"
+#: ../www/manager/Utils.js:378
+msgid "Destroy VM {0}"
 msgstr ""
 
-#: ../www/manager/dc/Config.js:29
-msgid "Users"
+#: ../www/manager/openvz/Network.js:56
+msgid "Device name"
 msgstr ""
 
-#: ../www/manager/node/Tasks.js:57
-msgid "View"
+#: ../www/manager/storage/DirEdit.js:38 ../www/manager/dc/StorageView.js:118 ../www/manager/Utils.js:533
+msgid "Directory"
 msgstr ""
 
-#: ../www/manager/qemu/Config.js:104
-msgid "Virtual machine {0} on node {1}"
+#: ../www/manager/qemu/Options.js:79 ../www/manager/qemu/Options.js:81
+msgid "Disk"
 msgstr ""
 
-#: ../www/manager/tree/ResourceTree.js:21
-msgid "Virtual machines"
+#: ../www/manager/qemu/Summary.js:83 ../www/manager/openvz/Summary.js:88
+msgid "Disk IO"
 msgstr ""
 
-#: ../www/manager/storage/LVMEdit.js:125 ../www/manager/storage/LVMEdit.js:132
-msgid "Volume group"
+#: ../www/manager/qemu/HDEdit.js:107
+msgid "Disk image"
 msgstr ""
 
-#: ../www/manager/Utils.js:544
+#: ../www/manager/data/ResourceStore.js:109
+msgid "Disk size"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:133
+msgid "Disk size (GB)"
+msgstr ""
+
+#: ../www/manager/openvz/RessourceView.js:45
+msgid "Disk space"
+msgstr ""
+
+#: ../www/manager/openvz/RessourceEdit.js:40
+msgid "Disk space (GB)"
+msgstr ""
+
+#: ../www/manager/data/ResourceStore.js:102
+msgid "Disk usage"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:78
+msgid "Display"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:137
+msgid "Do not use any media"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:13 ../www/manager/dc/OptionView.js:74
+msgid "Do not use any proxy"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:64 ../www/manager/VNCConsole.js:267
+msgid "Do you really want to reset VM {0}?"
+msgstr ""
+
+#: ../www/manager/node/Config.js:32
+msgid "Do you really want to restart node {0}?"
+msgstr ""
+
+#: ../www/manager/qemu/CmdMenu.js:40 ../www/manager/qemu/Config.js:72 ../www/manager/openvz/CmdMenu.js:40 ../www/manager/openvz/Config.js:52 ../www/manager/VNCConsole.js:279 ../www/manager/VNCConsole.js:398
+msgid "Do you really want to shutdown VM {0}?"
+msgstr ""
+
+#: ../www/manager/node/Config.js:40
+msgid "Do you really want to shutdown node {0}?"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:44 ../www/manager/openvz/Config.js:44 ../www/manager/VNCConsole.js:239 ../www/manager/VNCConsole.js:386
+msgid "Do you really want to stop VM {0}?"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:291
+msgid "Do you really want to suspend VM {0}?"
+msgstr ""
+
+#: ../www/manager/Utils.js:144
+msgid "Dutch"
+msgstr ""
+
+#: ../www/manager/Utils.js:145
+msgid "Dutch (Belgium)"
+msgstr ""
+
+#: ../www/manager/dc/Tasks.js:109 ../www/manager/node/Tasks.js:150
+msgid "ERROR"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:184 ../www/manager/qemu/Options.js:228 ../www/manager/openvz/RessourceView.js:85 ../www/manager/openvz/Network.js:320 ../www/manager/openvz/Options.js:130 ../www/manager/openvz/DNS.js:99 ../www/manager/dc/StorageView.js:54 ../www/manager/dc/OptionView.js:130 ../www/manager/dc/Backup.js:347 ../www/manager/node/NetworkView.js:73 ../www/manager/node/TimeView.js:43 ../www/manager/node/DNSView.js:32
+msgid "Edit"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:8
+msgid "Edit HTTP proxy settings"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:202
+msgid "Edit Harddisk settings ({0})"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:235
+msgid "Edit LVM storage {0}"
+msgstr ""
+
+#: ../www/manager/storage/NFSEdit.js:174
+msgid "Edit NFS storage {0}"
+msgstr ""
+
+#: ../www/manager/storage/DirEdit.js:109
+msgid "Edit directory storage {0}"
+msgstr ""
+
+#: ../www/manager/qemu/DisplayEdit.js:8
+msgid "Edit display settings"
+msgstr ""
+
+#: ../www/manager/storage/IScsiEdit.js:175
+msgid "Edit iSCSI storage {0}"
+msgstr ""
+
+#: ../www/manager/qemu/KeyboardEdit.js:8 ../www/manager/dc/OptionView.js:55
+msgid "Edit keyboard settings"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:33
+msgid "Edit language settings"
+msgstr ""
+
+#: ../www/manager/qemu/MemoryEdit.js:38
+msgid "Edit memory settings"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:162
+msgid "Edit network device settings"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:33
+msgid "Edit network device {0}"
+msgstr ""
+
+#: ../www/manager/qemu/ProcessorEdit.js:71
+msgid "Edit processor settings"
+msgstr ""
+
+#: ../www/manager/openvz/RessourceEdit.js:65
+msgid "Edit ressource settings"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:87
+msgid "Email"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:110 ../www/manager/qemu/Options.js:128 ../www/manager/storage/LVMEdit.js:195 ../www/manager/storage/DirEdit.js:57 ../www/manager/storage/IScsiEdit.js:135 ../www/manager/storage/NFSEdit.js:140 ../www/manager/dc/StorageView.js:200 ../www/manager/dc/UserEdit.js:66
+msgid "Enable"
+msgstr ""
+
+#: ../www/manager/storage/StatusView.js:20 ../www/manager/dc/UserView.js:155
+msgid "Enabled"
+msgstr ""
+
+#: ../www/manager/dc/Tasks.js:69 ../www/manager/node/Tasks.js:118
+msgid "End Time"
+msgstr ""
+
+#: ../www/manager/Utils.js:184
+msgid "English"
+msgstr ""
+
+#: ../www/manager/Utils.js:126
+msgid "English (UK)"
+msgstr ""
+
+#: ../www/manager/Utils.js:127
+msgid "English (USA"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:90
+msgid "Enter your password"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:67
+msgid "Enter your user name"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:49
+msgid "Enterprise Directory Server"
+msgstr ""
+
+#: ../www/manager/qemu/CmdMenu.js:21 ../www/manager/qemu/NetworkEdit.js:176 ../www/manager/qemu/CDEdit.js:183 ../www/manager/qemu/HardwareView.js:220 ../www/manager/qemu/HDEdit.js:216 ../www/manager/qemu/Config.js:87 ../www/manager/storage/ContentView.js:128 ../www/manager/storage/ContentView.js:137 ../www/manager/storage/ContentView.js:275 ../www/manager/panel/NotesView.js:11 ../www/manager/openvz/CmdMenu.js:21 ../www/manager/openvz/Network.js:186 ../www/manager/VNCConsole.js:177 ../www/manager/dc/AuthView.js:82 ../www/manager/dc/UserView.js:53 ../www/manager/dc/GroupView.js:49 ../www/manager/dc/Backup.js:377 ../www/manager/grid/BackupView.js:137 ../www/manager/window/LoginWindow.js:17 ../www/manager/window/Edit.js:87 ../www/manager/window/Edit.js:124 ../www/manager/window/Migrate.js:14 ../www/manager/node/NetworkView.js:37 ../www/manager/node/NetworkView.js:99 ../www/manager/node/NetworkView.js:189 ../www/manager/node/ServiceView.js:33 ../www/manager/node/Config.js:25
+msgid "Error"
+msgstr ""
+
+#: ../www/manager/Workspace.js:147
+msgid "Error: No such console type"
+msgstr ""
+
+#: ../www/manager/Utils.js:129
+msgid "Estonia"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:163
+msgid "Ethernet device"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:362
+msgid "Ethernet device (veth)"
+msgstr ""
+
+#: ../www/manager/Utils.js:33 ../www/manager/Utils.js:40 ../www/manager/Utils.js:65
+msgid "Example"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:31
+msgid "Exclude selected VMs"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:40
+msgid "Existing volume groups"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:62
+msgid "Expiration"
+msgstr ""
+
+#: ../www/manager/dc/UserView.js:161
+msgid "Expire"
+msgstr ""
+
+#: ../www/manager/storage/NFSEdit.js:112
+msgid "Export"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:74
+msgid "Failed"
+msgstr ""
+
+#: ../www/manager/Utils.js:131
+msgid "Faroe Islands"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:55
+msgid "File"
+msgstr ""
+
+#: ../www/manager/window/Wizard.js:117
+msgid "Finish"
+msgstr ""
+
+#: ../www/manager/Utils.js:130
+msgid "Finnish"
+msgstr ""
+
+#: ../www/manager/node/DNSEdit.js:26 ../www/manager/node/DNSView.js:26
+msgid "First DNS server"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:77
+msgid "First Name"
+msgstr ""
+
+#: ../www/manager/qemu/BootOrderEdit.js:114
+msgid "First boot device"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:86
+msgid "Floppy"
+msgstr ""
+
+#: ../www/manager/form/ViewSelector.js:15
+msgid "Folder View"
+msgstr ""
+
+#: ../www/manager/Utils.js:274
+msgid "Form fields may not be submitted with invalid values"
+msgstr ""
+
+#: ../www/manager/form/FileSelector.js:62 ../www/manager/storage/ContentView.js:301 ../www/manager/grid/BackupView.js:159 ../www/manager/Utils.js:45 ../www/manager/Utils.js:50 ../www/manager/Utils.js:55
+msgid "Format"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:133 ../www/manager/qemu/Options.js:138 ../www/manager/qemu/Options.js:146
+msgid "Freeze CPU at startup"
+msgstr ""
+
+#: ../www/manager/Utils.js:132 ../www/manager/Utils.js:186
+msgid "French"
+msgstr ""
+
+#: ../www/manager/Utils.js:133
+msgid "French (Belgium)"
+msgstr ""
+
+#: ../www/manager/Utils.js:134
+msgid "French (Canada)"
+msgstr ""
+
+#: ../www/manager/Utils.js:135
+msgid "French (Swiss)"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:13
+msgid "Friday"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:91
+msgid "GUI language"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:123 ../www/manager/node/NetworkView.js:247
+msgid "Gateway"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:47
+msgid "General"
+msgstr ""
+
+#: ../www/manager/Utils.js:124 ../www/manager/Utils.js:185
+msgid "German"
+msgstr ""
+
+#: ../www/manager/Utils.js:125
+msgid "German (Swiss)"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:149
+msgid "Got unexpected device type"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:93
+msgid "Grace period"
+msgstr ""
+
+#: ../www/manager/qemu/DisplayEdit.js:14
+msgid "Graphic card"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:32
+msgid "Group"
+msgstr ""
+
+#: ../www/manager/dc/GroupView.js:84
+msgid "Group name"
+msgstr ""
+
+#: ../www/manager/dc/GroupEdit.js:28
+msgid "GroupID"
+msgstr ""
+
+#: ../www/manager/dc/Config.js:34
+msgid "Groups"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:41
+msgid "HD space (root)"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:16 ../www/manager/dc/OptionView.js:97
+msgid "HTTP proxy"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:17 ../www/manager/qemu/HardwareView.js:99 ../www/manager/qemu/HardwareView.js:108 ../www/manager/qemu/HardwareView.js:117 ../www/manager/qemu/HardwareView.js:253
+msgid "Hard Disk"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:32
+msgid "Harddisk"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:116
+msgid "Hardware"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:411
+msgid "Host MAC"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:94
+msgid "Host MAC address"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:86
+msgid "Host device name"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:406
+msgid "Host ifname"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:93 ../www/manager/openvz/DNS.js:24 ../www/manager/openvz/DNS.js:32
+msgid "Hostname"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:15
+msgid "Hour (average)"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:16
+msgid "Hour (max)"
+msgstr ""
+
+#: ../www/manager/Utils.js:137
+msgid "Hungarian"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:112 ../www/manager/storage/DirEdit.js:29 ../www/manager/storage/IScsiEdit.js:89 ../www/manager/storage/NFSEdit.js:86 ../www/manager/data/ResourceStore.js:41 ../www/manager/dc/StorageView.js:161
+msgid "ID"
+msgstr ""
+
+#: ../www/manager/form/BusTypeSelector.js:12
+msgid "IDE"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:38
+msgid "IO delay"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:137
+msgid "IP Address"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:159 ../www/manager/openvz/CreateWizard.js:170 ../www/manager/node/NetworkEdit.js:91 ../www/manager/node/NetworkView.js:237
+msgid "IP address"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:161
+msgid "IP network"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:390
+msgid "IP/Name"
+msgstr ""
+
+#: ../www/manager/Utils.js:575
+msgid "ISO"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:103
+msgid "ISO Image"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:44
+msgid "ISO image"
+msgstr ""
+
+#: ../www/manager/Utils.js:138
+msgid "Icelandic"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:139
+msgid "Image"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:149
+msgid "Image format"
+msgstr ""
+
+#: ../www/manager/Utils.js:569
+msgid "Images"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:29
+msgid "Include selected VMs"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:26
+msgid "Installation Media"
+msgstr ""
+
+#: ../www/manager/form/NetworkCardSelector.js:10
+msgid "Intel E1000"
+msgstr ""
+
+#: ../www/manager/node/NetworkView.js:206
+msgid "Interface Name"
+msgstr ""
+
+#: ../www/manager/Utils.js:139
+msgid "Italian"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:211
+msgid "Items"
+msgstr ""
+
+#: ../www/manager/Utils.js:140 ../www/manager/Utils.js:187
+msgid "Japanese"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:115 ../www/manager/qemu/Options.js:120
+msgid "KVM hardware virtualization"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:43
+msgid "Kernel version"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:109 ../www/manager/openvz/CreateWizard.js:256
+msgid "Key"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:70 ../www/manager/dc/OptionView.js:85
+msgid "Keyboard"
+msgstr ""
+
+#: ../www/manager/qemu/KeyboardEdit.js:13 ../www/manager/dc/OptionView.js:60
+msgid "Keyboard Layout"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:66
+msgid "LDAP/LDAPs Server"
+msgstr ""
+
+#: ../www/manager/Utils.js:537
+msgid "LVM"
+msgstr ""
+
+#: ../www/manager/dc/StorageView.js:128
+msgid "LVM group"
+msgstr ""
+
+#: ../www/manager/dc/OptionView.js:38 ../www/manager/window/LoginWindow.js:105
+msgid "Language"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:82
+msgid "Last Name"
+msgstr ""
+
+#: ../www/manager/Utils.js:142
+msgid "Latvian"
+msgstr ""
+
+#: ../www/manager/Utils.js:104
+msgid "Linux 2.4 Kernel"
+msgstr ""
+
+#: ../www/manager/Utils.js:105
+msgid "Linux 3.X/2.6 Kernel"
+msgstr ""
+
+#: ../www/manager/qemu/OSTypeEdit.js:39
+msgid "Linux/Other"
+msgstr ""
+
+#: ../www/manager/Utils.js:141
+msgid "Lithuanian"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:35
+msgid "Load average"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:150
+msgid "Load failed"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:121
+msgid "Login"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:18
+msgid "Login failed. Please try again"
+msgstr ""
+
+#: ../www/manager/Workspace.js:308
+msgid "Logout"
+msgstr ""
+
+#: ../www/manager/panel/StatusPanel.js:11
+msgid "Logs"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:401
+msgid "MAC"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:119 ../www/manager/openvz/Network.js:69
+msgid "MAC address"
+msgstr ""
+
+#: ../www/manager/Utils.js:143
+msgid "Macedonian"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:170
+msgid "Max files"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:40 ../www/manager/qemu/CreateWizard.js:97 ../www/manager/openvz/RessourceView.js:23
+msgid "Memory"
+msgstr ""
+
+#: ../www/manager/qemu/MemoryEdit.js:17 ../www/manager/openvz/RessourceEdit.js:18
+msgid "Memory (MB)"
+msgstr ""
+
+#: ../www/manager/data/ResourceStore.js:124
+msgid "Memory size"
+msgstr ""
+
+#: ../www/manager/form/NodeSelector.js:48 ../www/manager/qemu/StatusView.js:47 ../www/manager/qemu/Summary.js:69 ../www/manager/data/ResourceStore.js:117 ../www/manager/openvz/StatusView.js:69 ../www/manager/openvz/Summary.js:74 ../www/manager/node/Summary.js:52
+msgid "Memory usage"
+msgstr ""
+
+#: ../www/manager/dc/Log.js:76
+msgid "Message"
+msgstr ""
+
+#: ../www/manager/qemu/OSTypeEdit.js:11
+msgid "Microsoft Windows"
+msgstr ""
+
+#: ../www/manager/Utils.js:101
+msgid "Microsoft Windows 2000"
+msgstr ""
+
+#: ../www/manager/Utils.js:103
+msgid "Microsoft Windows 7/2008r2"
+msgstr ""
+
+#: ../www/manager/Utils.js:102
+msgid "Microsoft Windows Vista/2008"
+msgstr ""
+
+#: ../www/manager/Utils.js:100
+msgid "Microsoft Windows XP/2003"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:51 ../www/manager/openvz/Config.js:59 ../www/manager/VNCConsole.js:249 ../www/manager/window/Migrate.js:71
+msgid "Migrate"
+msgstr ""
+
+#: ../www/manager/window/Migrate.js:79 ../www/manager/Utils.js:379
+msgid "Migrate VM {0}"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:179 ../www/manager/window/Backup.js:41 ../www/manager/node/NetworkEdit.js:60
+msgid "Mode"
+msgstr ""
+
+#: ../www/manager/dc/AuthView.js:32 ../www/manager/dc/UserView.js:75
+msgid "Modify"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:9
+msgid "Monday"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:126
+msgid "Monitor"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:21
+msgid "Month (average)"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:22
+msgid "Month (max)"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:94
+msgid "NAT mode"
+msgstr ""
+
+#: ../www/manager/Utils.js:535
+msgid "NFS"
+msgstr ""
+
+#: ../www/manager/dc/StorageView.js:136
+msgid "NFS share"
+msgstr ""
+
+#: ../www/manager/form/StorageSelector.js:53 ../www/manager/form/FileSelector.js:56 ../www/manager/qemu/StatusView.js:43 ../www/manager/qemu/Options.js:24 ../www/manager/storage/ContentView.js:294 ../www/manager/data/ResourceStore.js:96 ../www/manager/openvz/StatusView.js:64 ../www/manager/dc/UserView.js:168 ../www/manager/dc/Backup.js:100 ../www/manager/grid/ObjectGrid.js:115 ../www/manager/grid/BackupView.js:152 ../www/manager/node/NetworkEdit.js:81 ../www/manager/node/ServiceView.js:125
+msgid "Name"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:38 ../www/manager/qemu/Options.js:84 ../www/manager/openvz/CreateWizard.js:147 ../www/manager/openvz/Config.js:113 ../www/manager/node/Config.js:76
+msgid "Network"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:126
+msgid "Network Adapter"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:277
+msgid "Network Device"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:112
+msgid "Network card"
+msgstr ""
+
+#: ../www/manager/qemu/Summary.js:76 ../www/manager/openvz/Summary.js:81 ../www/manager/node/Summary.js:58
+msgid "Network traffic"
+msgstr ""
+
+#: ../www/manager/window/Wizard.js:93
+msgid "Next"
+msgstr ""
+
+#: ../www/manager/form/Boolean.js:12 ../www/manager/node/NetworkView.js:218 ../www/manager/node/NetworkView.js:219 ../www/manager/node/NetworkView.js:228 ../www/manager/node/NetworkView.js:229 ../www/manager/Utils.js:546
+msgid "No"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:53
+msgid "No Groups Selected"
+msgstr ""
+
+#: ../www/manager/qemu/HDEdit.js:165
+msgid "No backup"
+msgstr ""
+
+#: ../www/manager/form/CacheTypeSelector.js:13
+msgid "No cache"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:104
+msgid "No network device"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:186 ../www/manager/storage/DirEdit.js:73 ../www/manager/storage/IScsiEdit.js:126 ../www/manager/storage/NFSEdit.js:131
+msgid "No restrictions"
+msgstr ""
+
+#: ../www/manager/form/NodeSelector.js:42 ../www/manager/qemu/CreateWizard.js:52 ../www/manager/data/ResourceStore.js:153 ../www/manager/openvz/CreateWizard.js:71 ../www/manager/dc/Tasks.js:81 ../www/manager/dc/Log.js:50 ../www/manager/dc/Backup.js:85 ../www/manager/dc/Backup.js:113 ../www/manager/dc/Backup.js:418 ../www/manager/window/TaskViewer.js:34 ../www/manager/node/Tasks.js:126 ../www/manager/node/Config.js:60
+msgid "Node"
+msgstr ""
+
+#: ../www/manager/tree/ResourceTree.js:13
+msgid "Node list"
+msgstr ""
+
+#: ../www/manager/form/NodeSelector.js:80
+msgid "Node {0} seems to be offline!"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:184 ../www/manager/storage/DirEdit.js:71 ../www/manager/storage/IScsiEdit.js:124 ../www/manager/storage/NFSEdit.js:129
+msgid "Nodes"
+msgstr ""
+
+#: ../www/manager/Utils.js:146
+msgid "Norwegian"
+msgstr ""
+
+#: ../www/manager/panel/NotesView.js:45 ../www/manager/window/NotesEdit.js:8
+msgid "Notes"
+msgstr ""
+
+#: ../www/manager/node/Tasks.js:147
+msgid "OK"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:85 ../www/manager/qemu/Options.js:55 ../www/manager/qemu/OSTypeEdit.js:88
+msgid "OS Type"
+msgstr ""
+
+#: ../www/manager/Utils.js:212
+msgid "OS default"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:35
+msgid "OS template"
+msgstr ""
+
+#: ../www/manager/data/ResourceStore.js:48 ../www/manager/window/Migrate.js:63
+msgid "Online"
+msgstr ""
+
+#: ../www/manager/node/Tasks.js:94
+msgid "Only Errors"
+msgstr ""
+
+#: ../www/manager/tree/ResourceTree.js:25
+msgid "OpenVZ containers"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:46
+msgid "OpenVZ template"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:113
+msgid "Option 'IP address' requires a subnet mask"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:121 ../www/manager/openvz/Config.js:123 ../www/manager/dc/Config.js:14
+msgid "Options"
+msgstr ""
+
+#: ../www/manager/Utils.js:99 ../www/manager/Utils.js:110
+msgid "Other"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:92
+msgid "Output"
+msgstr ""
+
+#: ../www/manager/dc/Log.js:60
+msgid "PID"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:42
+msgid "PVE Manager version"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:125
+msgid "Passowords does not match!"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:105 ../www/manager/window/LoginWindow.js:88
+msgid "Password"
+msgstr ""
+
+#: ../www/manager/dc/ACLView.js:37
+msgid "Path"
+msgstr ""
+
+#: ../www/manager/dc/StorageView.js:181
+msgid "Path/Target"
+msgstr ""
+
+#: ../www/manager/node/NetworkView.js:263
+msgid "Pending changes (please reboot to activate changes)"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:136 ../www/manager/storage/Browser.js:34 ../www/manager/openvz/Config.js:145 ../www/manager/dc/Config.js:39
+msgid "Permissions"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:12 ../www/manager/window/LoginWindow.js:113 ../www/manager/Utils.js:295
+msgid "Please wait..."
+msgstr ""
+
+#: ../www/manager/Utils.js:147
+msgid "Polish"
+msgstr ""
+
+#: ../www/manager/storage/IScsiEdit.js:98
+msgid "Portal"
+msgstr ""
+
+#: ../www/manager/node/NetworkView.js:232
+msgid "Ports/Slaves"
+msgstr ""
+
+#: ../www/manager/Utils.js:148
+msgid "Portuguese"
+msgstr ""
+
+#: ../www/manager/Utils.js:149
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+#: ../www/manager/dc/RoleView.js:49
+msgid "Privileges"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:38
+msgid "Process ID"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:49 ../www/manager/openvz/RessourceView.js:39
+msgid "Processors"
+msgstr ""
+
+#: ../www/manager/dc/ACLView.js:56
+msgid "Propagate"
+msgstr ""
+
+#: ../www/manager/Workspace.js:111
+msgid "Proxmox Console"
+msgstr ""
+
+#: ../www/manager/Workspace.js:137
+msgid "Proxmox Shell"
+msgstr ""
+
+#: ../www/manager/window/LoginWindow.js:46
+msgid "Proxmox VE Login"
+msgstr ""
+
+#: ../www/manager/window/Wizard.js:182
+msgid "Proxmox VE Wizard"
+msgstr ""
+
+#: ../www/manager/form/DiskFormatSelector.js:10
+msgid "QEMU image format (qcow2)"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:83
+msgid "Quota Grace period"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:87
+msgid "Quota Grace period (seconds)"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:62
+msgid "Quota UGID limit"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:72
+msgid "Quota UGID limit (0 to disable user quotas)"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:39
+msgid "RAM usage"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:170 ../www/manager/qemu/Options.js:174 ../www/manager/qemu/Options.js:180
+msgid "RTC start date"
+msgstr ""
+
+#: ../www/manager/qemu/NetworkEdit.js:127
+msgid "Rate limit (MB/s)"
+msgstr ""
+
+#: ../www/manager/form/DiskFormatSelector.js:9
+msgid "Raw disk image (raw)"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:26
+msgid "Ready"
+msgstr ""
+
+#: ../www/manager/form/RealmComboBox.js:17 ../www/manager/dc/AuthEdit.js:26 ../www/manager/dc/AuthView.js:97 ../www/manager/dc/UserView.js:148 ../www/manager/dc/UserEdit.js:101
+msgid "Realm"
+msgstr ""
+
+#: ../www/manager/form/NetworkCardSelector.js:9
+msgid "Realtec RTL8139"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:308 ../www/manager/VNCConsole.js:409 ../www/manager/VNCConsole.js:459
+msgid "Refresh"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:315 ../www/manager/VNCConsole.js:416 ../www/manager/VNCConsole.js:466
+msgid "Reload"
+msgstr ""
+
+#: ../www/manager/Utils.js:394
+msgid "Reload service {0}"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:190 ../www/manager/qemu/Config.js:79 ../www/manager/openvz/Network.js:244 ../www/manager/openvz/Config.js:71 ../www/manager/dc/StorageView.js:60 ../www/manager/dc/Backup.js:353
+msgid "Remove"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:63 ../www/manager/VNCConsole.js:265 ../www/manager/window/Edit.js:174
+msgid "Reset"
+msgstr ""
+
+#: ../www/manager/Utils.js:382
+msgid "Reset VM {0}"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:143 ../www/manager/openvz/Config.js:108
+msgid "Resources"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:52
+msgid "Ressource"
+msgstr ""
+
+#: ../www/manager/node/ServiceView.js:65 ../www/manager/node/Config.js:31
+msgid "Restart"
+msgstr ""
+
+#: ../www/manager/Utils.js:393
+msgid "Restart service {0}"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:229 ../www/manager/grid/BackupView.js:94 ../www/manager/window/Restore.js:77
+msgid "Restore"
+msgstr ""
+
+#: ../www/manager/Utils.js:387
+msgid "Restore CT {0}"
+msgstr ""
+
+#: ../www/manager/Utils.js:377
+msgid "Restore VM {0}"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:301
+msgid "Resume"
+msgstr ""
+
+#: ../www/manager/Utils.js:385
+msgid "Resume VM {0}"
+msgstr ""
+
+#: ../www/manager/node/NetworkView.js:179
+msgid "Revert changes"
+msgstr ""
+
+#: ../www/manager/dc/ACLView.js:50
+msgid "Role"
+msgstr ""
+
+#: ../www/manager/dc/RoleView.js:42
+msgid "Role name"
+msgstr ""
+
+#: ../www/manager/dc/Config.js:44
+msgid "Roles"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:153
+msgid "Routed mode (venet)"
+msgstr ""
+
+#: ../www/manager/Utils.js:150
+msgid "Russian"
+msgstr ""
+
+#: ../www/manager/form/BusTypeSelector.js:19
+msgid "SCSI"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:92
+msgid "SSL"
+msgstr ""
+
+#: ../www/manager/node/StatusView.js:40
+msgid "SWAP usage"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:14
+msgid "Saturday"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:28 ../www/manager/storage/IScsiEdit.js:49 ../www/manager/storage/NFSEdit.js:49
+msgid "Scanning..."
+msgstr ""
+
+#: ../www/manager/grid/ResourceGrid.js:177 ../www/manager/grid/ResourceGrid.js:181
+msgid "Search"
+msgstr ""
+
+#: ../www/manager/node/DNSEdit.js:20 ../www/manager/node/DNSView.js:25
+msgid "Search domain"
+msgstr ""
+
+#: ../www/manager/node/DNSEdit.js:33 ../www/manager/node/DNSView.js:27
+msgid "Second DNS server"
+msgstr ""
+
+#: ../www/manager/qemu/BootOrderEdit.js:122
+msgid "Second boot device"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:56
+msgid "Select File..."
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:448
+msgid "Selection"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:33
+msgid "Selection mode"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:158
+msgid "Send email to"
+msgstr ""
+
+#: ../www/manager/qemu/SendKeyMenu.js:29
+msgid "SendKey"
+msgstr ""
+
+#: ../www/manager/storage/NFSEdit.js:95
+msgid "Server"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:71
+msgid "Server Address"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:85
+msgid "Server Port"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:62
+msgid "Server Type"
+msgstr ""
+
+#: ../www/manager/form/ViewSelector.js:11
+msgid "Server View"
+msgstr ""
+
+#: ../www/manager/node/Summary.js:46
+msgid "Server load"
+msgstr ""
+
+#: ../www/manager/node/TimeView.js:36
+msgid "Server time"
+msgstr ""
+
+#: ../www/manager/dc/Log.js:55
+msgid "Service"
+msgstr ""
+
+#: ../www/manager/node/Config.js:71
+msgid "Services"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:105 ../www/manager/openvz/CreateWizard.js:252
+msgid "Settings"
+msgstr ""
+
+#: ../www/manager/dc/Log.js:70
+msgid "Severity"
+msgstr ""
+
+#: ../www/manager/storage/StatusView.js:40 ../www/manager/storage/LVMEdit.js:201 ../www/manager/storage/DirEdit.js:63 ../www/manager/dc/StorageView.js:193
+msgid "Shared"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:470 ../www/manager/node/Config.js:47
+msgid "Shell"
+msgstr ""
+
+#: ../www/manager/qemu/CmdMenu.js:37 ../www/manager/qemu/Config.js:71 ../www/manager/openvz/CmdMenu.js:37 ../www/manager/openvz/Config.js:51 ../www/manager/VNCConsole.js:277 ../www/manager/VNCConsole.js:396 ../www/manager/node/Config.js:39
+msgid "Shutdown"
+msgstr ""
+
+#: ../www/manager/Utils.js:383
+msgid "Shutdown VM {0}"
+msgstr ""
+
+#: ../www/manager/form/FileSelector.js:67 ../www/manager/storage/StatusView.js:45 ../www/manager/storage/ContentView.js:306 ../www/manager/grid/BackupView.js:164
+msgid "Size"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:55
+msgid "Slaves"
+msgstr ""
+
+#: ../www/manager/Utils.js:151
+msgid "Slovenian"
+msgstr ""
+
+#: ../www/manager/form/BackupModeSelector.js:9
+msgid "Snapshot"
+msgstr ""
+
+#: ../www/manager/qemu/ProcessorEdit.js:15
+msgid "Sockets"
+msgstr ""
+
+#: ../www/manager/window/Restore.js:41
+msgid "Source"
+msgstr ""
+
+#: ../www/manager/Utils.js:128
+msgid "Spanish"
+msgstr ""
+
+#: ../www/manager/Utils.js:158
+msgid "Standard VGA"
+msgstr ""
+
+#: ../www/manager/qemu/CmdMenu.js:30 ../www/manager/qemu/Config.js:36 ../www/manager/openvz/CmdMenu.js:30 ../www/manager/openvz/Config.js:36 ../www/manager/VNCConsole.js:231 ../www/manager/VNCConsole.js:378 ../www/manager/node/ServiceView.js:49
+msgid "Start"
+msgstr ""
+
+#: ../www/manager/Utils.js:389
+msgid "Start CT {0}"
+msgstr ""
+
+#: ../www/manager/dc/Tasks.js:61 ../www/manager/node/Tasks.js:110
+msgid "Start Time"
+msgstr ""
+
+#: ../www/manager/Utils.js:380
+msgid "Start VM {0}"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:38 ../www/manager/qemu/Options.js:43 ../www/manager/qemu/Options.js:50 ../www/manager/openvz/Options.js:22 ../www/manager/openvz/Options.js:27 ../www/manager/openvz/Options.js:33
+msgid "Start at boot"
+msgstr ""
+
+#: ../www/manager/Utils.js:391
+msgid "Start service {0}"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:146 ../www/manager/dc/Backup.js:436 ../www/manager/window/TaskViewer.js:42
+msgid "Start time"
+msgstr ""
+
+#: ../www/manager/node/ServiceView.js:131
+msgid "State"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:44 ../www/manager/qemu/Summary.js:29 ../www/manager/storage/Summary.js:19 ../www/manager/openvz/StatusView.js:65 ../www/manager/openvz/Summary.js:29 ../www/manager/dc/Tasks.js:97 ../www/manager/dc/Backup.js:89 ../www/manager/window/TaskViewer.js:22 ../www/manager/window/TaskViewer.js:83 ../www/manager/node/Summary.js:20 ../www/manager/node/Tasks.js:142
+msgid "Status"
+msgstr ""
+
+#: ../www/manager/form/BackupModeSelector.js:11 ../www/manager/qemu/Config.js:43 ../www/manager/openvz/Config.js:43 ../www/manager/VNCConsole.js:237 ../www/manager/VNCConsole.js:384 ../www/manager/window/TaskViewer.js:71 ../www/manager/window/TaskViewer.js:77 ../www/manager/node/ServiceView.js:57
+msgid "Stop"
+msgstr ""
+
+#: ../www/manager/Utils.js:390
+msgid "Stop CT {0}"
+msgstr ""
+
+#: ../www/manager/Utils.js:381
+msgid "Stop VM {0}"
+msgstr ""
+
+#: ../www/manager/Utils.js:392
+msgid "Stop service {0}"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:111 ../www/manager/qemu/HDEdit.js:120 ../www/manager/data/ResourceStore.js:160 ../www/manager/openvz/CreateWizard.js:26 ../www/manager/openvz/CreateWizard.js:41 ../www/manager/openvz/Options.js:42 ../www/manager/dc/Config.js:19 ../www/manager/dc/Backup.js:57 ../www/manager/grid/BackupView.js:67 ../www/manager/window/Restore.js:25 ../www/manager/window/Backup.js:25
+msgid "Storage"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:442
+msgid "Storage ID"
+msgstr ""
+
+#: ../www/manager/form/ViewSelector.js:19
+msgid "Storage View"
+msgstr ""
+
+#: ../www/manager/tree/ResourceTree.js:17
+msgid "Storage list"
+msgstr ""
+
+#: ../www/manager/storage/Browser.js:19
+msgid "Storage {0} on node {1}"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:98 ../www/manager/node/NetworkView.js:242
+msgid "Subnet mask"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:109
+msgid "Subnet mask requires option 'IP address'"
+msgstr ""
+
+#: ../www/manager/Utils.js:248
+msgid "Successful"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:111 ../www/manager/storage/Browser.js:24 ../www/manager/openvz/Config.js:103 ../www/manager/node/Config.js:66
+msgid "Summary"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:15
+msgid "Sunday"
+msgstr ""
+
+#: ../www/manager/form/BackupModeSelector.js:10 ../www/manager/VNCConsole.js:289
+msgid "Suspend"
+msgstr ""
+
+#: ../www/manager/Utils.js:384
+msgid "Suspend VM {0}"
+msgstr ""
+
+#: ../www/manager/openvz/RessourceView.js:31
+msgid "Swap"
+msgstr ""
+
+#: ../www/manager/openvz/RessourceEdit.js:28
+msgid "Swap (MB)"
+msgstr ""
+
+#: ../www/manager/Utils.js:152
+msgid "Swedish"
+msgstr ""
+
+#: ../www/manager/node/Config.js:91
+msgid "Syslog"
+msgstr ""
+
+#: ../www/manager/storage/IScsiEdit.js:115
+msgid "Target"
+msgstr ""
+
+#: ../www/manager/window/Migrate.js:54
+msgid "Target node"
+msgstr ""
+
+#: ../www/manager/node/Config.js:97
+msgid "Task History"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:26
+msgid "Task type"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:114
+msgid "Task viewer: "
+msgstr ""
+
+#: ../www/manager/panel/StatusPanel.js:36
+msgid "Tasks"
+msgstr ""
+
+#: ../www/manager/openvz/CreateWizard.js:138 ../www/manager/openvz/Options.js:38
+msgid "Template"
+msgstr ""
+
+#: ../www/manager/Utils.js:573
+msgid "Templates"
+msgstr ""
+
+#: ../www/manager/Utils.js:153
+msgid "Thai"
+msgstr ""
+
+#: ../www/manager/node/DNSEdit.js:40 ../www/manager/node/DNSView.js:28
+msgid "Third DNS server"
+msgstr ""
+
+#: ../www/manager/qemu/BootOrderEdit.js:130
+msgid "Third boot device"
+msgstr ""
+
+#: ../www/manager/form/VMIDSelector.js:29
+msgid "This VM ID does not exists."
+msgstr ""
+
+#: ../www/manager/form/ControllerSelector.js:99
+msgid "This device is already in use."
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:12
+msgid "Thursday"
+msgstr ""
+
+#: ../www/manager/dc/Log.js:42 ../www/manager/node/Config.js:86
+msgid "Time"
+msgstr ""
+
+#: ../www/manager/node/TimeEdit.js:23 ../www/manager/node/TimeView.js:32
+msgid "Time zone"
+msgstr ""
+
+#: ../www/manager/data/TimezoneStore.js:421
+msgid "Timezone"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:37 ../www/manager/openvz/StatusView.js:42 ../www/manager/openvz/StatusView.js:50 ../www/manager/node/StatusView.js:28
+msgid "Total"
+msgstr ""
+
+#: ../www/manager/qemu/ProcessorEdit.js:53
+msgid "Total cores"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:10
+msgid "Tuesday"
+msgstr ""
+
+#: ../www/manager/Utils.js:154
+msgid "Turkish"
+msgstr ""
+
+#: ../www/manager/form/StorageSelector.js:59 ../www/manager/storage/StatusView.js:35 ../www/manager/data/ResourceStore.js:33 ../www/manager/openvz/Network.js:384 ../www/manager/dc/StorageView.js:167 ../www/manager/dc/AuthView.js:103
+msgid "Type"
+msgstr ""
+
+#: ../www/manager/qemu/Monitor.js:95
+msgid "Type 'help' for help."
+msgstr ""
+
+#: ../www/manager/node/Config.js:102
+msgid "UBC"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:76
+msgid "UGID limit"
+msgstr ""
+
+#: ../www/manager/data/reader/JsonObject.js:61
+msgid "Unable to parse the JSON returned by the server: {0}"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:47
+msgid "Unique task ID"
+msgstr ""
+
+#: ../www/manager/Utils.js:251
+msgid "Unknown error"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:134
+msgid "Unused Disk"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:96 ../www/manager/storage/ContentView.js:160 ../www/manager/storage/ContentView.js:281
+msgid "Upload"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:129 ../www/manager/storage/ContentView.js:138
+msgid "Upload failed"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:68
+msgid "Uploading file..."
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:49 ../www/manager/data/ResourceStore.js:146 ../www/manager/openvz/StatusView.js:73 ../www/manager/node/StatusView.js:34
+msgid "Uptime"
+msgstr ""
+
+#: ../www/manager/storage/Summary.js:45
+msgid "Usage"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:85
+msgid "Use CD/DVD disc image file (iso)"
+msgstr ""
+
+#: ../www/manager/storage/IScsiEdit.js:141
+msgid "Use LUNs directly"
+msgstr ""
+
+#: ../www/manager/qemu/Options.js:151 ../www/manager/qemu/Options.js:156 ../www/manager/qemu/Options.js:164
+msgid "Use local time for RTC"
+msgstr ""
+
+#: ../www/manager/qemu/CDEdit.js:130
+msgid "Use physical CD/DVD Drive"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:38 ../www/manager/storage/StatusView.js:50 ../www/manager/openvz/StatusView.js:43 ../www/manager/openvz/StatusView.js:51 ../www/manager/node/StatusView.js:29
+msgid "Used"
+msgstr ""
+
+#: ../www/manager/dc/AuthEdit.js:42
+msgid "User Attribute Name"
+msgstr ""
+
+#: ../www/manager/dc/Tasks.js:86 ../www/manager/dc/UserView.js:141 ../www/manager/dc/Log.js:65 ../www/manager/window/LoginWindow.js:65 ../www/manager/window/TaskViewer.js:30 ../www/manager/node/Tasks.js:82 ../www/manager/node/Tasks.js:131
+msgid "User name"
+msgstr ""
+
+#: ../www/manager/openvz/Options.js:66
+msgid "User quotas disabled."
+msgstr ""
+
+#: ../www/manager/dc/ACLView.js:43
+msgid "User/Group"
+msgstr ""
+
+#: ../www/manager/dc/UserEdit.js:26
+msgid "Userid"
+msgstr ""
+
+#: ../www/manager/dc/Config.js:29
+msgid "Users"
+msgstr ""
+
+#: ../www/manager/form/BusTypeSelector.js:15
+msgid "VIRTIO"
+msgstr ""
+
+#: ../www/manager/form/VMIDSelector.js:37 ../www/manager/window/Restore.js:47
+msgid "VM ID"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:105
+msgid "VM Type"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:73 ../www/manager/qemu/Options.js:27 ../www/manager/qemu/Options.js:32
+msgid "VM name"
+msgstr ""
+
+#: ../www/manager/data/ResourceStore.js:89 ../www/manager/dc/Backup.js:80
+msgid "VMID"
+msgstr ""
+
+#: ../www/manager/Utils.js:159
+msgid "VMWare compatible"
+msgstr ""
+
+#: ../www/manager/form/DiskFormatSelector.js:11
+msgid "VMware image format (vmdk)"
+msgstr ""
+
+#: ../www/manager/Utils.js:374
+msgid "VNC connection to VM/CT {0}"
+msgstr ""
+
+#: ../www/manager/Utils.js:375
+msgid "VNC shell"
+msgstr ""
+
+#: ../www/manager/openvz/StatusView.js:71
+msgid "VSwap usage"
+msgstr ""
+
+#: ../www/manager/storage/ContentView.js:45
+msgid "VZDump backup file"
+msgstr ""
+
+#: ../www/manager/qemu/CreateWizard.js:110 ../www/manager/openvz/CreateWizard.js:257 ../www/manager/grid/ObjectGrid.js:122
+msgid "Value"
+msgstr ""
+
+#: ../www/manager/Workspace.js:295
+msgid "Version"
+msgstr ""
+
+#: ../www/manager/node/Tasks.js:57
+msgid "View"
+msgstr ""
+
+#: ../www/manager/form/NetworkCardSelector.js:11
+msgid "VirtIO (paravirtualized)"
+msgstr ""
+
+#: ../www/manager/qemu/Config.js:104
+msgid "Virtual machine {0} on node {1}"
+msgstr ""
+
+#: ../www/manager/tree/ResourceTree.js:21
+msgid "Virtual machines"
+msgstr ""
+
+#: ../www/manager/storage/LVMEdit.js:125 ../www/manager/storage/LVMEdit.js:132
+msgid "Volume group"
+msgstr ""
+
+#: ../www/manager/form/DayOfWeekSelector.js:11
+msgid "Wednesday"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:19
+msgid "Week (average)"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:20
+msgid "Week (max)"
+msgstr ""
+
+#: ../www/manager/form/CacheTypeSelector.js:11
+msgid "Write back"
+msgstr ""
+
+#: ../www/manager/form/CacheTypeSelector.js:12
+msgid "Write back (unsafe)"
+msgstr ""
+
+#: ../www/manager/form/CacheTypeSelector.js:10
+msgid "Write through"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:23
+msgid "Year (average)"
+msgstr ""
+
+#: ../www/manager/form/RRDTypeSelector.js:24
+msgid "Year (max)"
+msgstr ""
+
+#: ../www/manager/form/Boolean.js:11 ../www/manager/node/NetworkView.js:217 ../www/manager/node/NetworkView.js:227 ../www/manager/Utils.js:545
 msgid "Yes"
 msgstr ""
 
@@ -516,3 +2124,259 @@ msgstr ""
 msgid "You are logged in as {0}"
 msgstr ""
 
+#: ../www/manager/dc/AuthView.js:81
+msgid "You are not permitted to delete the auth method: pam"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:10
+msgid "active-backup"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:455
+msgid "all except {0}"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:11
+msgid "athlon"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:15
+msgid "balance-alb"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:9
+msgid "balance-rr"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:14
+msgid "balance-tlb"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:11
+msgid "balance-xor"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:69
+msgid "barrier"
+msgstr ""
+
+#: ../www/manager/form/BondModeSelector.js:12
+msgid "broadcast"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:30
+msgid "can't create unknown device type"
+msgstr ""
+
+#: ../www/manager/VNCConsole.js:109
+msgid "can't get window size"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:12
+msgid "core2duo"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:13
+msgid "coreduo"
+msgstr ""
+
+#: ../www/manager/Utils.js:503
+msgid "days"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:81 ../www/manager/node/BCFailCnt.js:42
+msgid "failcnt"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:57
+msgid "held"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:22
+msgid "host"
+msgstr ""
+
+#: ../www/manager/Utils.js:539
+msgid "iSCSI"
+msgstr ""
+
+#: ../www/manager/dc/StorageView.js:145
+msgid "iSCSI target"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:61
+msgid "interface name already in use"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:14
+msgid "kvm32"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:15
+msgid "kvm64"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:75
+msgid "limit"
+msgstr ""
+
+#: ../www/manager/data/ResourceStore.js:139
+msgid "maxcpu"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:63
+msgid "maxheld"
+msgstr ""
+
+#: ../www/manager/dc/UserView.js:110 ../www/manager/dc/UserEdit.js:59
+msgid "never"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:15 ../www/manager/qemu/Summary.js:15 ../www/manager/qemu/CmdMenu.js:12 ../www/manager/qemu/HardwareView.js:35 ../www/manager/qemu/SendKeyMenu.js:13 ../www/manager/qemu/Options.js:17 ../www/manager/qemu/Monitor.js:18 ../www/manager/qemu/Config.js:15 ../www/manager/panel/NotesView.js:30 ../www/manager/openvz/StatusView.js:14 ../www/manager/openvz/Summary.js:15 ../www/manager/openvz/CmdMenu.js:12 ../www/manager/openvz/RessourceView.js:18 ../www/manager/openvz/Network.js:234 ../www/manager/openvz/Options.js:17 ../www/manager/openvz/DNS.js:17 ../www/manager/openvz/Config.js:15 ../www/manager/VNCConsole.js:209 ../www/manager/VNCConsole.js:356 ../www/manager/grid/BackupView.js:17 ../www/manager/window/Migrate.js:36 ../www/manager/window/Backup.js:14
+msgid "no VM ID specified"
+msgstr ""
+
+#: ../www/manager/grid/BackupView.js:22 ../www/manager/window/Migrate.js:40 ../www/manager/window/Backup.js:18
+msgid "no VM type specified"
+msgstr ""
+
+#: ../www/manager/node/NetworkView.js:43 ../www/manager/node/NetworkView.js:268
+msgid "no changes"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:23 ../www/manager/openvz/Network.js:127
+msgid "no dataCache specified"
+msgstr ""
+
+#: ../www/manager/panel/RRDView.js:17
+msgid "no datasource specified"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:36
+msgid "no interface name specified"
+msgstr ""
+
+#: ../www/manager/node/NetworkEdit.js:14
+msgid "no network device type specified"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:10 ../www/manager/qemu/Summary.js:10 ../www/manager/qemu/CmdMenu.js:8 ../www/manager/qemu/NetworkEdit.js:150 ../www/manager/qemu/CDEdit.js:158 ../www/manager/qemu/HardwareView.js:30 ../www/manager/qemu/HDEdit.js:182 ../www/manager/qemu/SendKeyMenu.js:9 ../www/manager/qemu/Options.js:12 ../www/manager/qemu/Monitor.js:13 ../www/manager/qemu/Config.js:10 ../www/manager/storage/StatusView.js:10 ../www/manager/storage/Summary.js:10 ../www/manager/storage/ContentView.js:16 ../www/manager/storage/ContentView.js:186 ../www/manager/storage/Browser.js:10 ../www/manager/panel/NotesView.js:25
+#: ../www/manager/openvz/StatusView.js:9 ../www/manager/openvz/Summary.js:10 ../www/manager/openvz/CmdMenu.js:8 ../www/manager/openvz/RessourceView.js:13 ../www/manager/openvz/Network.js:27 ../www/manager/openvz/Network.js:229 ../www/manager/openvz/Options.js:12 ../www/manager/openvz/DNS.js:12 ../www/manager/openvz/Config.js:10 ../www/manager/VNCConsole.js:205 ../www/manager/VNCConsole.js:352 ../www/manager/VNCConsole.js:453 ../www/manager/grid/BackupView.js:12 ../www/manager/window/Restore.js:10 ../www/manager/window/Migrate.js:32 ../www/manager/window/Backup.js:10 ../www/manager/node/StatusView.js:10 ../www/manager/node/Summary.js:10 ../www/manager/node/TimeEdit.js:11 ../www/manager/node/NetworkEdit.js:10 ../www/manager/node/NetworkView.js:11 ../www/manager/node/Tasks.js:11 ../www/manager/node/ServiceView.js:11 ../www/manager/node/TimeView.js:10 ../www/manager/node/Config.js:10 ../www/manager/node/DNSView.js:10
+msgid "no node name specified"
+msgstr ""
+
+#: ../www/manager/panel/RRDView.js:21
+msgid "no rrdurl specified"
+msgstr ""
+
+#: ../www/manager/data/DiffStore.js:18
+msgid "no rstore model specified"
+msgstr ""
+
+#: ../www/manager/data/DiffStore.js:14
+msgid "no rstore specified"
+msgstr ""
+
+#: ../www/manager/qemu/Summary.js:23 ../www/manager/openvz/Summary.js:23 ../www/manager/node/Summary.js:14
+msgid "no status storage specified"
+msgstr ""
+
+#: ../www/manager/storage/StatusView.js:15 ../www/manager/storage/Summary.js:15 ../www/manager/storage/ContentView.js:20 ../www/manager/storage/ContentView.js:191 ../www/manager/storage/Browser.js:15
+msgid "no storage ID specified"
+msgstr ""
+
+#: ../www/manager/data/UpdateStore.js:19
+msgid "no storeid specified"
+msgstr ""
+
+#: ../www/manager/openvz/Network.js:40
+msgid "no such interface {0}"
+msgstr ""
+
+#: ../www/manager/window/TaskViewer.js:15
+msgid "no task specified"
+msgstr ""
+
+#: ../www/manager/openvz/BeanCounterGrid.js:26 ../www/manager/VNCConsole.js:61 ../www/manager/grid/ObjectGrid.js:46 ../www/manager/window/Edit.js:140
+msgid "no url specified"
+msgstr ""
+
+#: ../www/manager/window/Restore.js:18
+msgid "no vmtype specified"
+msgstr ""
+
+#: ../www/manager/window/Restore.js:14
+msgid "no volume ID specified"
+msgstr ""
+
+#: ../www/manager/qemu/Summary.js:19 ../www/manager/openvz/Summary.js:19
+msgid "no workspace specified"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:463
+msgid "nothing selected"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:16
+msgid "pentium"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:17
+msgid "pentium2"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:18
+msgid "pentium3"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:19
+msgid "phenom"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:20
+msgid "qemu32"
+msgstr ""
+
+#: ../www/manager/form/CPUModelSelector.js:21
+msgid "qemu64"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:93
+msgid "running"
+msgstr ""
+
+#: ../www/manager/dc/Backup.js:95
+msgid "stopped"
+msgstr ""
+
+#: ../www/manager/Utils.js:411
+msgid "unable to parse upid {0}"
+msgstr ""
+
+#: ../www/manager/data/UpdateQueue.js:37
+msgid "unable to queue store without storeid"
+msgstr ""
+
+#: ../www/manager/Utils.js:541
+msgid "unknown"
+msgstr ""
+
+#: ../www/manager/window/Restore.js:97
+msgid "unknown VM type"
+msgstr ""
+
+#: ../www/manager/panel/NotesView.js:41
+msgid "unknown vm type {0}"
+msgstr ""
+
+#: ../www/manager/grid/BackupView.js:35
+msgid "unsupported VM type {0}"
+msgstr ""
+
+#: ../www/manager/qemu/HardwareView.js:61
+msgid "{0} ({1} sockets, {2} cores)"
+msgstr ""
+
+#: ../www/manager/qemu/StatusView.js:31 ../www/manager/openvz/StatusView.js:29 ../www/manager/Utils.js:614
+msgid "{0}% of {1} {2}"
+msgstr ""
+
diff --git a/www/manager/StateProvider.js b/www/manager/StateProvider.js
index ca34942..5cea90c 100644
--- a/www/manager/StateProvider.js
+++ b/www/manager/StateProvider.js
@@ -153,7 +153,7 @@ Ext.define('PVE.StateProvider', {
 	var history_change_cb = function(token) {
 	    //console.log("HC " + token);
 	    if (!token) {
-		var res = window.confirm('Are you sure you want to navigate away from this page?');
+		var res = window.confirm(gettext('Are you sure you want to navigate away from this page?'));
 		if (res){
 		    // process text value and close...
 		    Ext.History.back();
@@ -221,4 +221,4 @@ Ext.define('PVE.StateProvider', {
 	    me.callParent(arguments);
 	}
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/Utils.js b/www/manager/Utils.js
index bae9dbb..a18f678 100644
--- a/www/manager/Utils.js
+++ b/www/manager/Utils.js
@@ -96,18 +96,18 @@ Ext.define('PVE.Utils', { statics: {
     },
 
     kvm_ostypes: {
-	other: 'Other',
-	wxp: 'Microsoft Windows XP/2003',
-	w2k: 'Microsoft Windows 2000',
-	w2k8: 'Microsoft Windows Vista/2008',
-	win7: 'Microsoft Windows 7/2008r2',
-	l24: 'Linux 2.4 Kernel',
-	l26: 'Linux 3.X/2.6 Kernel'
+	other: gettext('Other'),
+	wxp: gettext('Microsoft Windows XP/2003'),
+	w2k: gettext('Microsoft Windows 2000'),
+	w2k8: gettext('Microsoft Windows Vista/2008'),
+	win7: gettext('Microsoft Windows 7/2008r2'),
+	l24: gettext('Linux 2.4 Kernel'),
+	l26: gettext('Linux 3.X/2.6 Kernel')
     },
 
     render_kvm_ostype: function (value) {
 	if (!value) {
-	    return 'Other';
+	    return gettext('Other');
 	}
 	var text = PVE.Utils.kvm_ostypes[value];
 	if (text) {
@@ -119,50 +119,50 @@ Ext.define('PVE.Utils', { statics: {
     // fixme: auto-generate this
     // for now, please keep in sync with PVE::Tools::kvmkeymaps
     kvm_keymaps: {
-	//ar: 'Arabic',
-	dk: 'Danish',
-	de: 'German', 
-	'de-ch': 'German (Swiss)', 
-	'en-gb': 'English (UK)', 
-	'en-us': 'English (USA',
-	es: 'Spanish',
-	//et: 'Estonia',
-	fi: 'Finnish',
-	//fo: 'Faroe Islands', 
-	fr: 'French', 
-	'fr-be': 'French (Belgium)', 
-	'fr-ca': 'French (Canada)',
-	'fr-ch': 'French (Swiss)',
-	//hr: 'Croatia',
-	hu: 'Hungarian',
-	is: 'Icelandic',
-	it: 'Italian', 
-	ja: 'Japanese',
-	lt: 'Lithuanian',
-	//lv: 'Latvian',
-	mk: 'Macedonian', 
-	nl: 'Dutch',
-	//'nl-be': 'Dutch (Belgium)',
-	no: 'Norwegian', 
-	pl: 'Polish',
-	pt: 'Portuguese',
-	'pt-br': 'Portuguese (Brazil)',
-	//ru: 'Russian',
-	si: 'Slovenian'
-	//sv: 'Swedish',
-	//th: 'Thai',
-	//tr: 'Turkish'
+	//ar: gettext('Arabic'),
+	dk: gettext('Danish'),
+	de: gettext('German'), 
+	'de-ch': gettext('German (Swiss)'), 
+	'en-gb': gettext('English (UK)'), 
+	'en-us': gettext('English (USA'),
+	es: gettext('Spanish'),
+	//et: gettext('Estonia'),
+	fi: gettext('Finnish'),
+	//fo: gettext('Faroe Islands'), 
+	fr: gettext('French'), 
+	'fr-be': gettext('French (Belgium)'), 
+	'fr-ca': gettext('French (Canada)'),
+	'fr-ch': gettext('French (Swiss)'),
+	//hr: gettext('Croatia'),
+	hu: gettext('Hungarian'),
+	is: gettext('Icelandic'),
+	it: gettext('Italian'), 
+	ja: gettext('Japanese'),
+	lt: gettext('Lithuanian'),
+	//lv: gettext('Latvian'),
+	mk: gettext('Macedonian'), 
+	nl: gettext('Dutch'),
+	//'nl-be': gettext('Dutch (Belgium)'),
+	no: gettext('Norwegian'), 
+	pl: gettext('Polish'),
+	pt: gettext('Portuguese'),
+	'pt-br': gettext('Portuguese (Brazil)'),
+	//ru: gettext('Russian'),
+	si: gettext('Slovenian')
+	//sv: gettext('Swedish'),
+	//th: gettext('Thai'),
+	//tr: gettext('Turkish')
     },
 
     kvm_vga_drivers: {
-	std: 'Standard VGA',
-	vmware: 'VMWare compatible',
-	cirrus: 'Cirrus Logic GD5446'
+	std: gettext('Standard VGA'),
+	vmware: gettext('VMWare compatible'),
+	cirrus: gettext('Cirrus Logic GD5446')
     },
 
     render_kvm_language: function (value) {
 	if (!value) {
-	    return 'Default';
+	    return gettext('Default');
 	}
 	var text = PVE.Utils.kvm_keymaps[value];
 	if (text) {
@@ -181,14 +181,15 @@ Ext.define('PVE.Utils', { statics: {
     },
 
     language_map: {
-	en: 'English',
-	de: 'German',
-	fr: 'French'
+	en: gettext('English'),
+	de: gettext('German'),
+	fr: gettext('French'),
+	ja: gettext('Japanese')
     },
 
     render_language: function (value) {
 	if (!value) {
-	    return 'Default (English)';
+	    return gettext('Default (English)');
 	}
 	var text = PVE.Utils.language_map[value];
 	if (text) {
@@ -208,7 +209,7 @@ Ext.define('PVE.Utils', { statics: {
 
     render_kvm_vga_driver: function (value) {
 	if (!value) {
-	    return 'OS default';
+	    return gettext('OS default');
 	}
 	var text = PVE.Utils.kvm_vga_drivers[value];
 	if (text) { 
@@ -324,11 +325,11 @@ Ext.define('PVE.Utils', { statics: {
 		    try {
 			response.result = Ext.decode(response.responseText);
 		    } catch(e) {}
-		    var msg = gettext('Connection error') + ' - server offline?';
+		    var msg = gettext('Connection error') + ' - ' + gettext('server offline?');
 		    if (response.aborted) {
-			msg = gettext('Connection error') + ' - aborted.';
+			msg = gettext('Connection error') + ' - ' + gettext('aborted.');
 		    } else if (response.timedout) {
-			msg = gettext('Connection error') + ' - Timeout.';
+			msg = gettext('Connection error') + ' - ' + gettext('Timeout.');
 		    } else if (response.status && response.statusText) {
 			msg = gettext('Connection error') + ' ' + response.status + ': ' + response.statusText;
 		    }
@@ -370,28 +371,28 @@ Ext.define('PVE.Utils', { statics: {
     },
 
     task_desc_table: {
-	vncproxy: 'VNC connection to VM/CT {0}',
-	vncshell: 'VNC shell',
-	qmcreate: 'Create VM {0}',
-	qmrestore: 'Restore VM {0}',
-	qmdestroy: 'Destroy VM {0}',
-	qmigrate: 'Migrate VM {0}',
-	qmstart: 'Start VM {0}',
-	qmstop: 'Stop VM {0}',
-	qmreset: 'Reset VM {0}',
-	qmshutdown: 'Shutdown VM {0}',
-	qmsuspend: 'Suspend VM {0}',
-	qmresume: 'Resume VM {0}',
-	vzcreate: 'Create CT {0}',
-	vzrestore: 'Restore CT {0}',
-	vzdestroy: 'Destroy CT {0}',
-	vzstart: 'Start CT {0}',
-	vzstop: 'Stop CT {0}',
-	srvstart: 'Start service {0}',
-	srvstop: 'Stop service {0}',
-	srvrestart: 'Restart service {0}',
-	srvreload: 'Reload service {0}',
-	vzdump: 'Backup'
+	vncproxy: gettext('VNC connection to VM/CT {0}'),
+	vncshell: gettext('VNC shell'),
+	qmcreate: gettext('Create VM {0}'),
+	qmrestore: gettext('Restore VM {0}'),
+	qmdestroy: gettext('Destroy VM {0}'),
+	qmigrate: gettext('Migrate VM {0}'),
+	qmstart: gettext('Start VM {0}'),
+	qmstop: gettext('Stop VM {0}'),
+	qmreset: gettext('Reset VM {0}'),
+	qmshutdown: gettext('Shutdown VM {0}'),
+	qmsuspend: gettext('Suspend VM {0}'),
+	qmresume: gettext('Resume VM {0}'),
+	vzcreate: gettext('Create CT {0}'),
+	vzrestore: gettext('Restore CT {0}'),
+	vzdestroy: gettext('Destroy CT {0}'),
+	vzstart: gettext('Start CT {0}'),
+	vzstop: gettext('Stop CT {0}'),
+	srvstart: gettext('Start service {0}'),
+	srvstop: gettext('Stop service {0}'),
+	srvrestart: gettext('Restart service {0}'),
+	srvreload: gettext('Reload service {0}'),
+	vzdump: gettext('Backup')
     },
 
     format_task_description: function(type, id) {	
@@ -407,7 +408,7 @@ Ext.define('PVE.Utils', { statics: {
 
 	var res = upid.match(/^UPID:(\S+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
 	if (!res) {
-	    throw "unable to parse upid '" + upid + "'";
+	    throw Ext.String.format(gettext("unable to parse upid {0}"), "'" + upid + "'");
 	}
 	task.node = res[1];
 	task.pid = parseInt(res[2], 16);
@@ -499,7 +500,7 @@ Ext.define('PVE.Utils', { statics: {
 	ut_str = ut_str.substr(ut_str.length - 2);
 
 	if (days) {
-	    var ds = days > 1 ? 'days' : 'day';
+	    var ds = days > 1 ? gettext('days') : gettext('day');
 	    return days.toString() + ' ' + ds + ' ' + 
 		hours_str + ':' + mins_str + ':' + ut_str;
 	} else {
@@ -529,15 +530,15 @@ Ext.define('PVE.Utils', { statics: {
 
     format_storage_type: function(value) {
 	if (value === 'dir') {
-	    return 'Directory';
+	    return gettext('Directory');
 	} else if (value === 'nfs') {
-	    return 'NFS';
+	    return gettext('NFS');
 	} else if (value === 'lvm') {
-	    return 'LVM';
+	    return gettext('LVM');
 	} else if (value === 'iscsi') {
-	    return 'iSCSI';
+	    return gettext('iSCSI');
 	} else {
-	    return 'unknown';
+	    return gettext('unknown');
 	}
     },
 
@@ -565,15 +566,15 @@ Ext.define('PVE.Utils', { statics: {
 
 	Ext.each(value.split(',').sort(), function(ct) {
 	    if (ct === 'images') {
-		cta.push('Images');
+		cta.push(gettext('Images'));
 	    } else if (ct === 'backup') {
-		cta.push('Backups');
+		cta.push(gettext('Backups'));
 	    } else if (ct === 'vztmpl') {
-		cta.push('Templates');
+		cta.push(gettext('Templates'));
 	    } else if (ct === 'iso') {
-		cta.push('ISO');
+		cta.push(gettext('ISO'));
 	    } else if (ct === 'rootdir') {
-		cta.push('Containers');
+		cta.push(gettext('Containers'));
 	    }
 	});
 
@@ -610,7 +611,7 @@ Ext.define('PVE.Utils', { statics: {
 	
 	var per = value * 100;
 
-	return per.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
+	return Ext.String.format(gettext("{0}% of {1} {2}"), per.toFixed(1), maxcpu.toString(), (maxcpu > 1 ? gettext('CPUs') : gettext('CPU')));
     },
 
     render_size: function(value, metaData, record, rowIndex, colIndex, store) {
diff --git a/www/manager/VNCConsole.js b/www/manager/VNCConsole.js
index 568738f..c36608e 100644
--- a/www/manager/VNCConsole.js
+++ b/www/manager/VNCConsole.js
@@ -58,7 +58,7 @@ Ext.define('PVE.VNCConsole', {
 	var me = this;
 
 	if (!me.url) {
-	    throw "no url specified";
+	    throw gettext("no url specified");
 	}
 
 	var myid = me.id + "-vncapp";
@@ -106,7 +106,7 @@ Ext.define('PVE.VNCConsole', {
 		oh = document.body.clientHeight;
 		ow = document.body.clientWidth;
 	    }  else {
-		throw "can't get window size";
+		throw gettext("can't get window size");
 	    }
 
 	    Ext.fly(applet).setSize(aw, ah + tbh);
@@ -174,7 +174,7 @@ Ext.define('PVE.VNCConsole', {
 		    params: me.params,
 		    method: me.method || 'POST',
 		    failure: function(response, opts) {
-			box.update("Error " + response.htmlStatus);
+			box.update(gettext("Error") + " " + response.htmlStatus);
 		    },
 		    success: function(response, opts) {
 			start_vnc_viewer(response.result.data);
@@ -202,11 +202,11 @@ Ext.define('PVE.KVMConsole', {
 	var me = this;
  
 	if (!me.nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vm_command = function(cmd, params, reload_applet) {
@@ -342,11 +342,11 @@ Ext.define('PVE.OpenVZConsole', {
 	var me = this;
  
 	if (!me.nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vm_command = function(cmd, params, reload_applet) {
@@ -447,7 +447,7 @@ Ext.define('PVE.Shell', {
 	var me = this;
  
 	if (!me.nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var tbar = [ 
@@ -478,4 +478,4 @@ Ext.define('PVE.Shell', {
 
 	me.callParent();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/Workspace.js b/www/manager/Workspace.js
index eb09278..eb4dfe8 100644
--- a/www/manager/Workspace.js
+++ b/www/manager/Workspace.js
@@ -108,7 +108,7 @@ Ext.define('PVE.ConsoleWorkspace', {
 
     alias: ['widget.pveConsoleWorkspace'],
 
-    title: 'Proxmox Console',
+    title: gettext('Proxmox Console'),
 
     initComponent : function() {
 	var me = this;
@@ -142,7 +142,7 @@ Ext.define('PVE.ConsoleWorkspace', {
 		toplevel: true
 	    };
 	} else if (consoleType === 'shell') {
-	    me.title = "node '" + param.node + "' - Proxmox Shell";
+	    me.title = "node " + param.node + " - " + gettext("Proxmox Shell");
 	    content = {
 		xtype: 'pveShell',
 		nodename: param.node,
@@ -152,7 +152,7 @@ Ext.define('PVE.ConsoleWorkspace', {
 	    content = {
 		border: false,
 		bodyPadding: 10,
-		html: 'Error: No such console type' 
+		html: gettext('Error: No such console type')
 	    };
 	}
 
@@ -300,7 +300,7 @@ Ext.define('PVE.StdWorkspace', {
 			{
 			    minWidth: 200,
 			    flex: 1,
-			    html: '<span class="x-panel-header-text">Proxmox Virtual Environment<br>Version ' + PVE.GUIVersion + "</span>"
+			    html: '<span class="x-panel-header-text">Proxmox Virtual Environment<br>' + gettext('Version') + ' ' + PVE.GUIVersion + "</span>"
 			},
 			{
 			    pack: 'end',
diff --git a/www/manager/data/DiffStore.js b/www/manager/data/DiffStore.js
index 2356995..bf2484a 100644
--- a/www/manager/data/DiffStore.js
+++ b/www/manager/data/DiffStore.js
@@ -11,11 +11,11 @@ Ext.define('PVE.data.DiffStore', {
 	config = config || {};
 
 	if (!config.rstore) {
-	    throw "no rstore specified";
+	    throw gettext("no rstore specified");
 	}
 
 	if (!config.rstore.model) {
-	    throw "no rstore model specified";
+	    throw gettext("no rstore model specified");
 	}
 
 	var rstore = config.rstore;
diff --git a/www/manager/data/ResourceStore.js b/www/manager/data/ResourceStore.js
index 82ac35d..8d2263b 100644
--- a/www/manager/data/ResourceStore.js
+++ b/www/manager/data/ResourceStore.js
@@ -38,7 +38,7 @@ Ext.define('PVE.data.ResourceStore', {
 		width: 80
 	    },
 	    id: {
-		header: 'ID',
+		header: gettext('ID'),
 		type: 'text',
 		hidden: true,
 		sortable: true,
@@ -86,7 +86,7 @@ Ext.define('PVE.data.ResourceStore', {
 		}
 	    },
 	    vmid: {
-		header: 'VMID',
+		header: gettext('VMID'),
 		type: 'integer',
 		hidden: true,
 		sortable: true,
@@ -136,7 +136,7 @@ Ext.define('PVE.data.ResourceStore', {
 		width: 100
 	    },
 	    maxcpu: {
-		header: 'maxcpu',
+		header: gettext('maxcpu'),
 		type: 'integer',
 		hidden: true,
 		sortable: true,
diff --git a/www/manager/data/TimezoneStore.js b/www/manager/data/TimezoneStore.js
index f00cc2f..f2c906f 100644
--- a/www/manager/data/TimezoneStore.js
+++ b/www/manager/data/TimezoneStore.js
@@ -418,7 +418,7 @@ Ext.define('PVE.data.TimezoneStore', {
 
 	config = config || {};
 
-	Ext.regModel('Timezone', {
+	Ext.regModel(gettext('Timezone'), {
 	    fields: ['zone'],
 	    proxy: {
 		type: 'memory',
diff --git a/www/manager/data/UpdateQueue.js b/www/manager/data/UpdateQueue.js
index 3cf2aa8..ac2945c 100644
--- a/www/manager/data/UpdateQueue.js
+++ b/www/manager/data/UpdateQueue.js
@@ -34,7 +34,7 @@ Ext.define('PVE.data.UpdateQueue', {
 	Ext.apply(me, {
 	    queue: function(store) {
 		if (!store.storeid) {
-		    throw "unable to queue store without storeid";
+		    throw gettext("unable to queue store without storeid");
 		}
 		if (!queue_idx[store.storeid]) {
 		    queue_idx[store.storeid] = store;
diff --git a/www/manager/data/UpdateStore.js b/www/manager/data/UpdateStore.js
index 0079e43..470e3cd 100644
--- a/www/manager/data/UpdateStore.js
+++ b/www/manager/data/UpdateStore.js
@@ -16,7 +16,7 @@ Ext.define('PVE.data.UpdateStore', {
 	}
 
 	if (!config.storeid) {
-	    throw "no storeid specified";
+	    throw gettext("no storeid specified");
 	}
 
 	var load_task = new Ext.util.DelayedTask();
diff --git a/www/manager/data/reader/JsonObject.js b/www/manager/data/reader/JsonObject.js
index d819c4b..b0b0f5e 100644
--- a/www/manager/data/reader/JsonObject.js
+++ b/www/manager/data/reader/JsonObject.js
@@ -58,7 +58,7 @@ Ext.define('PVE.data.reader.JsonObject', {
                 response: response,
                 json: response.responseText,
                 parseError: ex,
-                msg: 'Unable to parse the JSON returned by the server: ' + ex.toString()
+                msg: Ext.String.format(gettext('Unable to parse the JSON returned by the server: {0}'), ex.toString())
             });
         }
 
diff --git a/www/manager/dc/ACLView.js b/www/manager/dc/ACLView.js
index b9514a8..2024057 100644
--- a/www/manager/dc/ACLView.js
+++ b/www/manager/dc/ACLView.js
@@ -34,26 +34,26 @@ Ext.define('PVE.dc.ACLView', {
 	    },
 	    columns: [
 		{
-		    header: 'Path',
+		    header: gettext('Path'),
 		    width: 200,
 		    sortable: true,
 		    dataIndex: 'path'
 		},
 		{
-		    header: 'User/Group',
+		    header: gettext('User/Group'),
 		    width: 200,
 		    sortable: true,
 		    renderer: render_ugid,
 		    dataIndex: 'ugid'
 		},
 		{
-		    header: 'Role',
+		    header: gettext('Role'),
 		    width: 150,
 		    sortable: true,
 		    dataIndex: 'roleid'
 		},
 		{
-		    header: 'Propagate',
+		    header: gettext('Propagate'),
 		    width: 80,
 		    sortable: true,
 		    dataIndex: 'propagate'
diff --git a/www/manager/dc/AuthEdit.js b/www/manager/dc/AuthEdit.js
index b66c976..5efe07e 100644
--- a/www/manager/dc/AuthEdit.js
+++ b/www/manager/dc/AuthEdit.js
@@ -23,7 +23,7 @@ Ext.define('PVE.dc.AuthEdit', {
             {
                 xtype: me.create ? 'textfield' : 'displayfield',
                 name: 'realm',
-                fieldLabel: 'Realm',
+                fieldLabel: gettext('Realm'),
                 value: me.realm,
                 emptyText: 'company.net',
                 allowBlank: false
@@ -31,7 +31,7 @@ Ext.define('PVE.dc.AuthEdit', {
             {
                 xtype: 'textfield',
                 name: 'base_dn',
-                fieldLabel: 'Base Domain Name',
+                fieldLabel: gettext('Base Domain Name'),
                 emptyText: 'CN=Users,DC=Company,DC=net',
                 allowBlank: false
             },
@@ -39,19 +39,19 @@ Ext.define('PVE.dc.AuthEdit', {
                 xtype: 'textfield',
                 name: 'user_attr',
                 emptyText: 'uid / sAMAccountName',
-                fieldLabel: 'User Attribute Name',
+                fieldLabel: gettext('User Attribute Name'),
                 allowBlank: false
             },
             {
                 xtype: 'textfield',
                 name: 'comment',
-                fieldLabel: 'Comment',
-                emptyText: 'Enterprise Directory Server',
+                fieldLabel: gettext('Comment'),
+                emptyText: gettext('Enterprise Directory Server'),
                 allowBlank: false
             },
             {
                 xtype: 'pvecheckbox',
-                fieldLabel: 'Default Realm',
+                fieldLabel: gettext('Default Realm'),
                 name: 'default',
                 uncheckedValue: 0
             }
@@ -59,18 +59,18 @@ Ext.define('PVE.dc.AuthEdit', {
 
         var column2 = [
 	    Ext.create('PVE.form.KVComboBox', {
-		fieldLabel: 'Server Type',
+		fieldLabel: gettext('Server Type'),
                 name: 'type',
 		data: [
-		    ['ad', 'Active Directory Server'],
-		    ['ldap', 'LDAP/LDAPs Server']
+		    ['ad', gettext('Active Directory Server')],
+		    ['ldap', gettext('LDAP/LDAPs Server')]
 		]
 	    }),
             {
                 xtype: 'textfield',
-                fieldLabel: 'Server Address',
+                fieldLabel: gettext('Server Address'),
                 name: 'servers',
-                emptyText: '192.168.2.23,ldap.company.net',
+                emptyText: gettext('192.168.2.23,ldap.company.net'),
                 listeners: {
                     change: function(combo, newValue){
                         serverlist = newValue.split(',');
@@ -82,14 +82,14 @@ Ext.define('PVE.dc.AuthEdit', {
             {
                 xtype: 'numberfield',
                 name: 'port',
-                fieldLabel: 'Server Port',
+                fieldLabel: gettext('Server Port'),
                 minValue: 1,
                 maxValue: 65535,
                 allowBlank: false
             },
             {
                 xtype: 'pvecheckbox',
-                fieldLabel: 'SSL',
+                fieldLabel: gettext('SSL'),
                 name: 'secure',
                 uncheckedValue: 0
             }
@@ -109,7 +109,7 @@ Ext.define('PVE.dc.AuthEdit', {
 	});
 
         Ext.applyIf(me, {
-            title: me.create ? "Create Auth" : "Edit Auth '" + me.realm + "'",
+            title: me.create ? gettext("Create Auth") : Ext.String.format(gettext("Edit Auth {0}"), "'" + me.realm + "'"),
             url: url,
             method: method,
 	    items: [ ipanel ]
diff --git a/www/manager/dc/AuthView.js b/www/manager/dc/AuthView.js
index 7452c2b..52c75aa 100644
--- a/www/manager/dc/AuthView.js
+++ b/www/manager/dc/AuthView.js
@@ -20,7 +20,7 @@ Ext.define('PVE.dc.AuthView', {
 
         var tbar = [
             {
-		text: 'Create',
+		text: gettext('Create'),
 		handler: function() {
                     var win = Ext.create('PVE.dc.AuthEdit',{
                     });
@@ -29,7 +29,7 @@ Ext.define('PVE.dc.AuthView', {
 		}
             },
             {
-		text: 'Modify',
+		text: gettext('Modify'),
 		handler: function() {
 		    var sm = me.getSelectionModel();
 		    var rec = sm.getSelection()[0];
@@ -47,7 +47,7 @@ Ext.define('PVE.dc.AuthView', {
 		}
             },
             {
-		text: 'Delete',
+		text: gettext('Delete'),
 		handler: function() {
 		    var msg;
 		    var sm = me.getSelectionModel();
@@ -59,8 +59,8 @@ Ext.define('PVE.dc.AuthView', {
 		    var realm = rec.data.realm;
 
 		    if (realm !== 'pam' && realm != 'pve') {
-			msg = 'Are you sure you want to permanently the authentication realm: ' + realm;
-			Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+			msg = Ext.String.format(gettext('Are you sure you want to permanently the authentication realm: {0}'), realm);
+			Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 			    if (btn !== 'yes') {
 				return;
 			    }
@@ -78,8 +78,8 @@ Ext.define('PVE.dc.AuthView', {
 			    });
 			});
 		    } else {
-			msg = 'You are not permitted to delete the auth method: pam';
-			Ext.Msg.alert('Error', msg);
+			msg = gettext('You are not permitted to delete the auth method: pam');
+			Ext.Msg.alert(gettext('Error'), msg);
 		    }
 		}
             }
@@ -94,20 +94,20 @@ Ext.define('PVE.dc.AuthView', {
 	    },
 	    columns: [
 		{
-		    header: 'Realm',
+		    header: gettext('Realm'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'realm'
 		},
 		{
-		    header: 'Type',
+		    header: gettext('Type'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'type'
 		},
 		{
 		    id: 'comment',
-		    header: 'Comment',
+		    header: gettext('Comment'),
 		    sortable: false,
 		    dataIndex: 'comment',
 		    flex: 1
diff --git a/www/manager/dc/Backup.js b/www/manager/dc/Backup.js
index d6a4c36..632e8fa 100644
--- a/www/manager/dc/Backup.js
+++ b/www/manager/dc/Backup.js
@@ -26,11 +26,11 @@ Ext.define('PVE.dc.BackupEdit', {
 	var selModeField =  Ext.create('PVE.form.KVComboBox', {
 	    xtype: 'pveKVComboBox',
 	    data: [
-		['include', 'Include selected VMs'],
-		['all', 'All VMs'],
-		['exclude', 'Exclude selected VMs']
+		['include', gettext('Include selected VMs')],
+		['all', gettext('All VMs')],
+		['exclude', gettext('Exclude selected VMs')]
 	    ],
-	    fieldLabel: 'Selection mode',
+	    fieldLabel: gettext('Selection mode'),
 	    name: 'selMode',
 	    value: ''
 	});
@@ -54,7 +54,7 @@ Ext.define('PVE.dc.BackupEdit', {
 	});
 
 	var storagesel = Ext.create('PVE.form.StorageSelector', {
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    nodename: 'localhost',
 	    storageContent: 'backup',
 	    allowBlank: false,
@@ -77,32 +77,32 @@ Ext.define('PVE.dc.BackupEdit', {
 	    disabled: true,
 	    columns: [
 		{ 
-		    header: 'VMID',
+		    header: gettext('VMID'),
 		    dataIndex: 'vmid',
 		    width: 60
 		},
 		{ 
-		    header: 'Node',
+		    header: gettext('Node'),
 		    dataIndex: 'node'
 		},
 		{ 
-		    header: 'Status',
+		    header: gettext('Status'),
 		    dataIndex: 'uptime',
 		    renderer: function(value) {
 			if (value) {
-			    return 'running';
+			    return gettext('running');
 			} else {
-			    return 'stopped';
+			    return gettext('stopped');
 			}
 		    }
 		},
 		{ 
-		    header: 'Name', 
+		    header: gettext('Name'), 
 		    dataIndex: 'name',
 		    flex: 1 
 		},
 		{ 
-		    header: 'VM Type', 
+		    header: gettext('VM Type'), 
 		    dataIndex: 'type'
 		}
 	    ]
@@ -110,11 +110,11 @@ Ext.define('PVE.dc.BackupEdit', {
 
 	var nodesel = Ext.create('PVE.form.NodeSelector', {
 	    name: 'node',
-	    fieldLabel: 'Node',
+	    fieldLabel: gettext('Node'),
 	    allowBlank: true,
 	    editable: true,
 	    autoSelect: false,
-	    emptyText: '-- any --',
+	    emptyText: gettext('-- any --'),
 	    listeners: {
 		change: function(f, value) {
 		    storagesel.setNodename(value || 'localhost');
@@ -136,14 +136,14 @@ Ext.define('PVE.dc.BackupEdit', {
 	    {
 		xtype: 'pveDayOfWeekSelector',
 		name: 'dow',
-		fieldLabel: 'Day of week',
+		fieldLabel: gettext('Day of week'),
 		multiSelect: true,
 		value: ['sat'],
 		allowBlank: false
 	    },
 	    {
 		xtype: 'timefield',
-		fieldLabel: 'Start time',
+		fieldLabel: gettext('Start time'),
 		name: 'starttime',
 		format: 'H:i',
 		value: '00:00',
@@ -155,19 +155,19 @@ Ext.define('PVE.dc.BackupEdit', {
 	var column2 = [
 	    {
 		xtype: 'textfield',
-		fieldLabel: 'Send email to',
+		fieldLabel: gettext('Send email to'),
 		name: 'mailto'
 	    },
 	    {
 		xtype: 'pvecheckbox',
-		fieldLabel: 'Compression',
+		fieldLabel: gettext('Compression'),
 		name: 'compress',
 		checked: true,
 		uncheckedValue: 0
 	    },
 	    {
 		xtype: 'numberfield',
-		fieldLabel: 'Max files',
+		fieldLabel: gettext('Max files'),
 		name: 'maxfiles',
 		minValue: 1,
 		maxValue: 365,
@@ -176,7 +176,7 @@ Ext.define('PVE.dc.BackupEdit', {
 	    },
 	    {
 		xtype: 'pveBackupModeSelector',
-		fieldLabel: 'Mode',
+		fieldLabel: gettext('Mode'),
 		value: 'snapshot',
 		name: 'mode'
 	    },
@@ -270,7 +270,7 @@ Ext.define('PVE.dc.BackupEdit', {
 	};
 
         Ext.applyIf(me, {
-            title: me.create ? "Create Backup Job" : "Edit Backup Job",
+            title: me.create ? gettext("Create Backup Job") : gettext("Edit Backup Job"),
             url: url,
             method: method,
 	    items: [ ipanel, vmgrid ]
@@ -344,13 +344,13 @@ Ext.define('PVE.dc.BackupView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
 
 	var remove_btn = new Ext.Button({
-	    text: 'Remove',
+	    text: gettext('Remove'),
 	    disabled: true,
 	    handler: function(){
 		var sm = me.getSelectionModel();
@@ -360,9 +360,9 @@ Ext.define('PVE.dc.BackupView', {
 		    return;
 		}
 
-		var msg = "Are you sure you want to delete this backup job?";
+		var msg = gettext("Are you sure you want to delete this backup job?");
 
-		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 		    if (btn !== 'yes') {
 			return;
 		    }
@@ -374,7 +374,7 @@ Ext.define('PVE.dc.BackupView', {
 			    reload();
 			},
 			failure: function (response, opts) {
-			    Ext.Msg.alert('Error', response.htmlStatus);
+			    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 			}
 		    });
 		});
@@ -403,7 +403,7 @@ Ext.define('PVE.dc.BackupView', {
 	    },
 	    tbar: [
 		{
-		    text: 'Add',
+		    text: gettext('Add'),
 		    handler: function() {
 			var win = Ext.create('PVE.dc.BackupEdit',{});
 			win.on('destroy', reload);
@@ -415,7 +415,7 @@ Ext.define('PVE.dc.BackupView', {
 	    ],		
 	    columns: [
 		{
-		    header: 'Node',
+		    header: gettext('Node'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'node',
@@ -423,44 +423,44 @@ Ext.define('PVE.dc.BackupView', {
 			if (value) {
 			    return value;
 			}
-			return '-- all --';
+			return gettext('-- all --');
 		    }
 		},
 		{
-		    header: 'Day of week',
+		    header: gettext('Day of week'),
 		    width: 200,
 		    sortable: false,
 		    dataIndex: 'dow'
 		},
 		{
-		    header: 'Start time',
+		    header: gettext('Start time'),
 		    width: 60,
 		    sortable: true,
 		    dataIndex: 'starttime'
 		},
 		{
-		    header: 'Storage ID',
+		    header: gettext('Storage ID'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'storage'
 		},
 		{
-		    header: 'Selection',
+		    header: gettext('Selection'),
 		    flex: 1,
 		    sortable: false,
 		    dataIndex: 'vmid',
 		    renderer: function(value, metaData, record) {
 			if (record.data.all) {
 			    if (record.data.exclude) {
-				return "all except " + record.data.exclude;
+				return Ext.String.format(gettext("all except {0}"), record.data.exclude);
 			    }
-			    return "-- all --";
+			    return gettext("-- all --");
 			}
 			if (record.data.vmid) {
 			    return record.data.vmid;
 			}
 
-			return "nothing selected";
+			return gettext("nothing selected");
 		    }
 		}
 	    ],
@@ -488,4 +488,4 @@ Ext.define('PVE.dc.BackupView', {
 	    { name: 'compress', type: 'boolean' }
 	]
     });
-});
\ No newline at end of file
+});
diff --git a/www/manager/dc/GroupEdit.js b/www/manager/dc/GroupEdit.js
index aa0cadd..1b85bb9 100644
--- a/www/manager/dc/GroupEdit.js
+++ b/www/manager/dc/GroupEdit.js
@@ -19,20 +19,20 @@ Ext.define('PVE.dc.GroupEdit', {
         }
 
         Ext.applyIf(me, {
-            title: me.create ? "Create Group" :  "Edit Group '" + me.groupid + "'",
+            title: me.create ? gettext("Create Group") : Ext.String.format(gettext("Edit Group {0}"), "'" + me.groupid + "'"),
             url: url,
             method: method,
             items: [
                 {
 		    xtype: 'pvetextfield',
-		    fieldLabel: 'GroupID',
+		    fieldLabel: gettext('GroupID'),
 		    name: 'groupid',
 		    value: me.groupid,
 		    allowBlank: false
 		},
                 {
 		    xtype: 'pvetextfield',
-		    fieldLabel: 'Comment',
+		    fieldLabel: gettext('Comment'),
 		    name: 'comment',
 		    value: me.groupid,
 		    allowBlank: false
diff --git a/www/manager/dc/GroupView.js b/www/manager/dc/GroupView.js
index b60f193..4842122 100644
--- a/www/manager/dc/GroupView.js
+++ b/www/manager/dc/GroupView.js
@@ -23,7 +23,7 @@ Ext.define('PVE.dc.GroupView', {
         };
 
 	var remove_btn = new Ext.Button({
-	    text: 'Delete',
+	    text: gettext('Delete'),
 	    disabled: true,
 	    handler: function() {
 		var sm = me.getSelectionModel();
@@ -33,8 +33,8 @@ Ext.define('PVE.dc.GroupView', {
 		}
 		var groupid = rec.data.groupid;
 
-		var msg = 'Are you sure you want to permanently delete the group: ' + groupid;
-		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		var msg = Ext.String.format(gettext('Are you sure you want to permanently delete the group: {0}'), groupid);
+		Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 		    if (btn !== 'yes') {
 			return;
 		    }
@@ -46,7 +46,7 @@ Ext.define('PVE.dc.GroupView', {
 			    reload();
 			},
 			failure: function (response, opts) {
-			    Ext.Msg.alert('Error',response.htmlStatus);
+			    Ext.Msg.alert(gettext('Error'),response.htmlStatus);
 			}
 		    });
 		});
@@ -55,7 +55,7 @@ Ext.define('PVE.dc.GroupView', {
 
 	var tbar = [
             {
-		text: 'Create',
+		text: gettext('Create'),
 		handler: function() {
 		    var win = Ext.create('PVE.dc.GroupEdit', {
 		    });
@@ -81,13 +81,13 @@ Ext.define('PVE.dc.GroupView', {
 	    },
 	    columns: [
 		{
-		    header: 'Group name',
+		    header: gettext('Group name'),
 		    width: 200,
 		    sortable: true,
 		    dataIndex: 'groupid'
 		},
 		{
-		    header: 'Comment',
+		    header: gettext('Comment'),
 		    sortable: false,
 		    dataIndex: 'comment',
 		    flex: 1
diff --git a/www/manager/dc/Log.js b/www/manager/dc/Log.js
index f3db5d4..0dfd70e 100644
--- a/www/manager/dc/Log.js
+++ b/www/manager/dc/Log.js
@@ -57,7 +57,7 @@ Ext.define('PVE.dc.Log', {
 		    width: 100
 		},
 		{ 
-		    header: "PID", 
+		    header: gettext("PID"), 
 		    dataIndex: 'pid',
 		    width: 100 
 		},
diff --git a/www/manager/dc/OptionView.js b/www/manager/dc/OptionView.js
index 97e5832..2de23e9 100644
--- a/www/manager/dc/OptionView.js
+++ b/www/manager/dc/OptionView.js
@@ -13,7 +13,29 @@ Ext.define('PVE.dc.HttpProxyEdit', {
 		emptyText: gettext('Do not use any proxy'),
 		deleteEmpty: true,
 		value: '',
-		fieldLabel: 'HTTP proxy'
+		fieldLabel: gettext('HTTP proxy')
+	    }
+	});
+
+	me.callParent();
+
+	me.load();
+    }
+});
+
+Ext.define('PVE.dc.LanguageEdit', {
+    extend: 'PVE.window.Edit',
+
+    initComponent : function() {
+	var me = this;
+
+	Ext.applyIf(me, {
+	    title: gettext("Edit language settings"),
+	    items: {
+		xtype: 'pveLanguageSelector',
+		name: 'language',
+		value: '',
+		fieldLabel: gettext('Language')
 	    }
 	});
 
@@ -65,8 +87,14 @@ Ext.define('PVE.dc.OptionView', {
 		renderer: PVE.Utils.render_kvm_language,
 		required: true 
 	    },
+	    language: { 
+		header: gettext('GUI language'), 
+		editor: 'PVE.dc.LanguageEdit',
+		renderer: PVE.Utils.render_language,
+		required: true 
+	    },
 	    http_proxy: { 
-		header: 'HTTP proxy',
+		header: gettext('HTTP proxy'),
 		editor: 'PVE.dc.HttpProxyEdit', 
 		required: true,
 		renderer: function(value) {
diff --git a/www/manager/dc/RoleView.js b/www/manager/dc/RoleView.js
index 31a1d7d..f583111 100644
--- a/www/manager/dc/RoleView.js
+++ b/www/manager/dc/RoleView.js
@@ -39,14 +39,14 @@ Ext.define('PVE.dc.RoleView', {
 	    },
 	    columns: [
 		{
-		    header: 'Role name',
+		    header: gettext('Role name'),
 		    width: 150,
 		    sortable: true,
 		    dataIndex: 'roleid'
 		},
 		{
 		    id: 'privs',
-		    header: 'Privileges',
+		    header: gettext('Privileges'),
 		    sortable: false,
 		    renderer: render_privs,
 		    dataIndex: 'privs',
diff --git a/www/manager/dc/StorageView.js b/www/manager/dc/StorageView.js
index 2653c7f..9811179 100644
--- a/www/manager/dc/StorageView.js
+++ b/www/manager/dc/StorageView.js
@@ -115,7 +115,7 @@ Ext.define('PVE.dc.StorageView', {
 		    menu: new Ext.menu.Menu({
 			items: [
 			    {
-				text: 'Directory',
+				text: gettext('Directory'),
 				iconCls: 'pve-itype-icon-itype',
 				handler: function() {
 				    var win = Ext.create('PVE.storage.DirEdit', {});
@@ -125,7 +125,7 @@ Ext.define('PVE.dc.StorageView', {
 
 			    },
 			    {
-				text: 'LVM group',
+				text: gettext('LVM group'),
 				handler: function() {
 				    var win = Ext.create('PVE.storage.LVMEdit', {});
 				    win.on('destroy', reload);
@@ -133,7 +133,7 @@ Ext.define('PVE.dc.StorageView', {
 				}
 			    },
 			    {
-				text: 'NFS share',
+				text: gettext('NFS share'),
 				iconCls: 'pve-itype-icon-node',
 				handler: function() {
 				    var win = Ext.create('PVE.storage.NFSEdit', {});
@@ -142,7 +142,7 @@ Ext.define('PVE.dc.StorageView', {
 				}
 			    },
 			    {
-				text: 'iSCSI target',
+				text: gettext('iSCSI target'),
 				iconCls: 'pve-itype-icon-node',
 				handler: function() {
 				    var win = Ext.create('PVE.storage.IScsiEdit', {});
@@ -158,7 +158,7 @@ Ext.define('PVE.dc.StorageView', {
 	    ],
 	    columns: [
 		{
-		    header: 'ID',
+		    header: gettext('ID'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'storage'
@@ -178,7 +178,7 @@ Ext.define('PVE.dc.StorageView', {
 		    renderer: PVE.Utils.format_content_types
 		},
 		{
-		    header: 'Path/Target',
+		    header: gettext('Path/Target'),
 		    flex: 1,
 		    sortable: true,
 		    dataIndex: 'path',
diff --git a/www/manager/dc/Tasks.js b/www/manager/dc/Tasks.js
index 2f5bc0a..5c7e002 100644
--- a/www/manager/dc/Tasks.js
+++ b/www/manager/dc/Tasks.js
@@ -106,7 +106,7 @@ Ext.define('PVE.dc.Tasks', {
 			    return 'OK';
 			}
 			// metaData.attr = 'style="color:red;"'; 
-			return "ERROR: " + value;
+			return gettext("ERROR") + ": " + value;
 		    }
 		}
 	    ],
@@ -120,4 +120,4 @@ Ext.define('PVE.dc.Tasks', {
 
 	me.callParent();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/dc/UserEdit.js b/www/manager/dc/UserEdit.js
index 3a807ce..8874e7a 100644
--- a/www/manager/dc/UserEdit.js
+++ b/www/manager/dc/UserEdit.js
@@ -23,13 +23,13 @@ Ext.define('PVE.dc.UserEdit', {
             {
                 xtype: me.create ? 'textfield' : 'displayfield',
                 name: 'userid',
-                fieldLabel: 'Userid',
+                fieldLabel: gettext('Userid'),
                 value: me.userid,
                 allowBlank: false,
                 submitValue: me.create ? true : false
             },
 	    new Ext.form.field.ComboBox({
-		fieldLabel: 'Group',
+		fieldLabel: gettext('Group'),
 		name: 'groups',
 		multiSelect: true,
 		hiddenName: 'groupid',
@@ -50,20 +50,20 @@ Ext.define('PVE.dc.UserEdit', {
 		typeAhead: true,
 		queryMode: 'local',
 		triggerAction: 'all',
-		emptyText: 'No Groups Selected',
+		emptyText: gettext('No Groups Selected'),
 		selectOnFocus: true
 	    }),
             {
                 xtype: 'datefield',
                 name: 'expire',
-		emptyText: 'never',
+		emptyText: gettext('never'),
 		format: 'Y-m-d',
 		submitFormat: 'U',
-                fieldLabel: 'Expiration'
+                fieldLabel: gettext('Expiration')
             },
 	    {
 		xtype: 'pvecheckbox',
-		fieldLabel: 'Enable',
+		fieldLabel: gettext('Enable'),
 		name: 'enable',
 		uncheckedValue: 0,
 		defaultValue: 1
@@ -74,23 +74,23 @@ Ext.define('PVE.dc.UserEdit', {
 	    {
 		xtype: 'textfield',
 		name: 'firstname',
-		fieldLabel: 'First Name'
+		fieldLabel: gettext('First Name')
 	    },
 	    {
 		xtype: 'textfield',
 		name: 'lastname',
-		fieldLabel: 'Last Name'
+		fieldLabel: gettext('Last Name')
 	    },
 	    {
 		xtype: 'textfield',
 		name: 'email',
-		fieldLabel: 'Email',
+		fieldLabel: gettext('Email'),
 		vtype: 'email'
 	    },
 	    {
 		xtype: 'textfield',
 		name: 'comment',
-		fieldLabel: 'Comment'
+		fieldLabel: gettext('Comment')
 	    }
 	];
  
@@ -98,7 +98,7 @@ Ext.define('PVE.dc.UserEdit', {
             column1.splice(1,0,{
                 xtype: 'pveRealmComboBox',
                 name: 'realm',
-                fieldLabel: 'Realm',
+                fieldLabel: gettext('Realm'),
                 allowBlank: false,
                 listeners: {
                     change: function(combo, newValue){
@@ -128,7 +128,7 @@ Ext.define('PVE.dc.UserEdit', {
 	});
 
         Ext.applyIf(me, {
-            title: me.create ? "Create User" : "Edit User '" + me.userid + "'",
+            title: me.create ? gettext("Create User") : Ext.String.format(gettext("Edit User {0}"), "'" + me.userid + "'"),
             url: url,
             method: method,
 	    items: [ ipanel ]
diff --git a/www/manager/dc/UserView.js b/www/manager/dc/UserView.js
index 5fe484a..3d7a87d 100644
--- a/www/manager/dc/UserView.js
+++ b/www/manager/dc/UserView.js
@@ -24,7 +24,7 @@ Ext.define('PVE.dc.UserView', {
 	};
 
 	var remove_btn = new Ext.Button({
-	    text: 'Delete',
+	    text: gettext('Delete'),
 	    disabled: true,
 	    handler: function() {
 		var msg;
@@ -36,8 +36,8 @@ Ext.define('PVE.dc.UserView', {
 
 		var userid = rec.data.userid;
 
-		msg = 'Are you sure you want to permanently delete the user: ' + userid;
-		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		msg = Ext.String.format(gettext('Are you sure you want to permanently delete the user: {0}?'), userid);
+		Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 		    if (btn !== 'yes') {
 			return;
 		    }
@@ -50,7 +50,7 @@ Ext.define('PVE.dc.UserView', {
 			    reload();
 			},
 			failure: function (response, opts) {
-			    Ext.Msg.alert('Error',response.htmlStatus);
+			    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 			}
 		    });
 		});
@@ -72,7 +72,7 @@ Ext.define('PVE.dc.UserView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Modify',
+	    text: gettext('Modify'),
 	    disabled: true,
 	    handler: run_editor
 	});
@@ -94,7 +94,7 @@ Ext.define('PVE.dc.UserView', {
 
         var tbar = [
             {
-		text: 'Create',
+		text: gettext('Create'),
 		handler: function() {
                     var win = Ext.create('PVE.dc.UserEdit',{
                     });
@@ -107,7 +107,7 @@ Ext.define('PVE.dc.UserView', {
 	   
 	var render_expire = function(date) {
 	    if (!date) {
-		return 'never';
+		return gettext('never');
 	    }
 	    return Ext.Date.format(date, "Y-m-d");
 	};
@@ -138,34 +138,34 @@ Ext.define('PVE.dc.UserView', {
 
 	    columns: [
 		{
-		    header: 'User name',
+		    header: gettext('User name'),
 		    width: 200,
 		    sortable: true,
 		    renderer: render_username,
 		    dataIndex: 'userid'
 		},
 		{
-		    header: 'Realm',
+		    header: gettext('Realm'),
 		    width: 100,
 		    sortable: true,
 		    renderer: render_realm,
 		    dataIndex: 'userid'
 		},
 		{
-		    header: 'Enabled',
+		    header: gettext('Enabled'),
 		    width: 80,
 		    sortable: true,
 		    dataIndex: 'enable'
 		},
 		{
-		    header: 'Expire',
+		    header: gettext('Expire'),
 		    width: 80,
 		    sortable: true,
 		    renderer: render_expire, 
 		    dataIndex: 'expire'
 		},
 		{
-		    header: 'Name',
+		    header: gettext('Name'),
 		    width: 150,
 		    sortable: true,
 		    renderer: render_full_name,
@@ -173,7 +173,7 @@ Ext.define('PVE.dc.UserView', {
 		},
 		{
 		    id: 'comment',
-		    header: 'Comment',
+		    header: gettext('Comment'),
 		    sortable: false,
 		    dataIndex: 'comment',
 		    flex: 1
diff --git a/www/manager/form/BackupModeSelector.js b/www/manager/form/BackupModeSelector.js
index 8e42bd7..715d9eb 100644
--- a/www/manager/form/BackupModeSelector.js
+++ b/www/manager/form/BackupModeSelector.js
@@ -6,9 +6,9 @@ Ext.define('PVE.form.BackupModeSelector', {
 	var me = this;
 
 	me.data = [
-	    ['snapshot', 'Snapshot'],
-	    ['suspend', 'Suspend'],
-	    ['stop', 'Stop']
+	    ['snapshot', gettext('Snapshot')],
+	    ['suspend', gettext('Suspend')],
+	    ['stop', gettext('Stop')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/BondModeSelector.js b/www/manager/form/BondModeSelector.js
index 75a5be8..a83c7ed 100644
--- a/www/manager/form/BondModeSelector.js
+++ b/www/manager/form/BondModeSelector.js
@@ -6,13 +6,13 @@ Ext.define('PVE.form.BondModeSelector', {
 	var me = this;
 
         me.data = [ 
-	    ['balance-rr', 'balance-rr'], 
-	    ['active-backup', 'active-backup'], 
-	    ['balance-xor', 'balance-xor'], 
-	    ['broadcast', 'broadcast'], 
-	    ['802.3ad', '802.3ad'], 
-	    ['balance-tlb', 'balance-tlb'], 
-	    ['balance-alb', 'balance-alb']
+	    ['balance-rr', gettext('balance-rr')], 
+	    ['active-backup', gettext('active-backup')], 
+	    ['balance-xor', gettext('balance-xor')], 
+	    ['broadcast', gettext('broadcast')], 
+	    ['802.3ad', gettext('802.3ad')], 
+	    ['balance-tlb', gettext('balance-tlb')], 
+	    ['balance-alb', gettext('balance-alb')]
 	];
  
 	me.callParent();
diff --git a/www/manager/form/Boolean.js b/www/manager/form/Boolean.js
index de55553..1bcba95 100644
--- a/www/manager/form/Boolean.js
+++ b/www/manager/form/Boolean.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.Boolean', {
 	var me = this;
 
 	me.data = [
-	    ['', 'Default'],
-	    [1, 'Yes'],
-	    [0, 'No']
+	    ['', gettext('Default')],
+	    [1, gettext('Yes')],
+	    [0, gettext('No')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/BridgeSelector.js b/www/manager/form/BridgeSelector.js
index 029c32d..0470459 100644
--- a/www/manager/form/BridgeSelector.js
+++ b/www/manager/form/BridgeSelector.js
@@ -41,13 +41,13 @@ Ext.define('PVE.form.BridgeSelector', {
             listConfig: {
 		columns: [
 		    {
-			header: 'Bridge',
+			header: gettext('Bridge'),
 			dataIndex: 'iface',
 			hideable: false,
 			flex: 1
 		    },
 		    {
-			header: 'Active',  
+			header: gettext('Active'),  
 			width: 60, 
 			dataIndex: 'active', 
 			renderer: PVE.Utils.format_boolean
diff --git a/www/manager/form/BusTypeSelector.js b/www/manager/form/BusTypeSelector.js
index b3b0cee..3e69102 100644
--- a/www/manager/form/BusTypeSelector.js
+++ b/www/manager/form/BusTypeSelector.js
@@ -9,14 +9,14 @@ Ext.define('PVE.form.BusTypeSelector', {
     initComponent: function() {
 	var me = this;
 
-	me.data = [['ide', 'IDE']];
+	me.data = [['ide', gettext('IDE')]];
 
 	if (!me.noVirtIO) {
-	    me.data.push(['virtio', 'VIRTIO']);
+	    me.data.push(['virtio', gettext('VIRTIO')]);
 	}
 
 	if (!me.noScsi) {
-	    me.data.push(['scsi', 'SCSI']);
+	    me.data.push(['scsi', gettext('SCSI')]);
 	}
 
 	me.callParent();
diff --git a/www/manager/form/CPUModelSelector.js b/www/manager/form/CPUModelSelector.js
index aad2cb1..d6b0759 100644
--- a/www/manager/form/CPUModelSelector.js
+++ b/www/manager/form/CPUModelSelector.js
@@ -6,20 +6,20 @@ Ext.define('PVE.form.CPUModelSelector', {
 	var me = this;
 
         me.data = [ 
-	    ['', 'Default (qemu64)'],
-	    ['486', '486'],
-	    ['athlon', 'athlon'],
-	    ['core2duo', 'core2duo'],
-	    ['coreduo', 'coreduo'],
-	    ['kvm32', 'kvm32'],
-	    ['kvm64', 'kvm64'],
-	    ['pentium', 'pentium'],
-	    ['pentium2', 'pentium2'],
-	    ['pentium3', 'pentium3'],
-	    ['phenom', 'phenom'],
-	    ['qemu32', 'qemu32'],
-	    ['qemu64', 'qemu64'],
-	    ['host', 'host']
+	    ['', gettext('Default (qemu64)')],
+	    ['486', gettext('486')],
+	    ['athlon', gettext('athlon')],
+	    ['core2duo', gettext('core2duo')],
+	    ['coreduo', gettext('coreduo')],
+	    ['kvm32', gettext('kvm32')],
+	    ['kvm64', gettext('kvm64')],
+	    ['pentium', gettext('pentium')],
+	    ['pentium2', gettext('pentium2')],
+	    ['pentium3', gettext('pentium3')],
+	    ['phenom', gettext('phenom')],
+	    ['qemu32', gettext('qemu32')],
+	    ['qemu64', gettext('qemu64')],
+	    ['host', gettext('host')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/CacheTypeSelector.js b/www/manager/form/CacheTypeSelector.js
index d5b1164..10a64d9 100644
--- a/www/manager/form/CacheTypeSelector.js
+++ b/www/manager/form/CacheTypeSelector.js
@@ -6,11 +6,11 @@ Ext.define('PVE.form.CacheTypeSelector', {
 	var me = this;
 
 	me.data = [
-	    ['', 'Default (no cache)'],
-	    ['writethrough', 'Write through'],
-	    ['writeback', 'Write back'],
-	    ['unsafe', 'Write back (unsafe)'],
-	    ['none', 'No cache']
+	    ['', gettext('Default (no cache)')],
+	    ['writethrough', gettext('Write through')],
+	    ['writeback', gettext('Write back')],
+	    ['unsafe', gettext('Write back (unsafe)')],
+	    ['none', gettext('No cache')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/ControllerSelector.js b/www/manager/form/ControllerSelector.js
index 028ec13..167d31a 100644
--- a/www/manager/form/ControllerSelector.js
+++ b/www/manager/form/ControllerSelector.js
@@ -56,7 +56,7 @@ Ext.define('PVE.form.ControllerSelector', {
 	var me = this;
 
 	Ext.apply(me, {
-	    fieldLabel: 'Bus/Device',
+	    fieldLabel: gettext('Bus/Device'),
 	    layout: 'hbox',
 	    height: 22, // hack: set to same height as other fields
 	    defaults: {
@@ -96,7 +96,7 @@ Ext.define('PVE.form.ControllerSelector', {
 			var controller = field.getValue();
 			var confid = controller + value;
 			if (Ext.isDefined(me.vmconfig[confid])) {
-			    return "This device is already in use.";
+			    return gettext("This device is already in use.");
 			}
 			return true;
 		    }
@@ -106,4 +106,4 @@ Ext.define('PVE.form.ControllerSelector', {
 
 	me.callParent();
     }
-});   
\ No newline at end of file
+});   
diff --git a/www/manager/form/DayOfWeekSelector.js b/www/manager/form/DayOfWeekSelector.js
index 678609f..dc7d789 100644
--- a/www/manager/form/DayOfWeekSelector.js
+++ b/www/manager/form/DayOfWeekSelector.js
@@ -6,13 +6,13 @@ Ext.define('PVE.form.DayOfWeekSelector', {
 	var me = this;
 
 	me.data = [
-	    ['mon', 'Monday'],
-	    ['tue', 'Tuesday'],
-	    ['wed', 'Wednesday'],
-	    ['thu', 'Thursday'],
-	    ['fri', 'Friday'],
-	    ['sat', 'Saturday'],
-	    ['sun', 'Sunday']
+	    ['mon', gettext('Monday')],
+	    ['tue', gettext('Tuesday')],
+	    ['wed', gettext('Wednesday')],
+	    ['thu', gettext('Thursday')],
+	    ['fri', gettext('Friday')],
+	    ['sat', gettext('Saturday')],
+	    ['sun', gettext('Sunday')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/DiskFormatSelector.js b/www/manager/form/DiskFormatSelector.js
index ce6c2d7..a6cfb56 100644
--- a/www/manager/form/DiskFormatSelector.js
+++ b/www/manager/form/DiskFormatSelector.js
@@ -6,9 +6,9 @@ Ext.define('PVE.form.DiskFormatSelector', {
 	var me = this;
 
         me.data = [ 
-	    ['raw', 'Raw disk image (raw)'], 
-	    ['qcow2', 'QEMU image format (qcow2)'],
-	    ['vmdk', 'VMware image format (vmdk)']
+	    ['raw', gettext('Raw disk image (raw)')], 
+	    ['qcow2', gettext('QEMU image format (qcow2)')],
+	    ['vmdk', gettext('VMware image format (vmdk)')]
 	];
 
 	me.callParent();
diff --git a/www/manager/form/FileSelector.js b/www/manager/form/FileSelector.js
index 1044db2..9cbbea3 100644
--- a/www/manager/form/FileSelector.js
+++ b/www/manager/form/FileSelector.js
@@ -53,18 +53,18 @@ Ext.define('PVE.form.FileSelector', {
             listConfig: {
 		columns: [
 		    {
-			header: 'Name',
+			header: gettext('Name'),
 			dataIndex: 'text',
 			hideable: false,
 			flex: 1
 		    },
 		    {
-			header: 'Format',  
+			header: gettext('Format'),  
 			width: 60, 
 			dataIndex: 'format'
 		    },
 		    {
-			header: 'Size',  
+			header: gettext('Size'),  
 			width: 60, 
 			dataIndex: 'size', 
 			renderer: PVE.Utils.format_size 
@@ -77,4 +77,4 @@ Ext.define('PVE.form.FileSelector', {
 
 	me.setStorage(me.storage, me.nodename);
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/form/NetworkCardSelector.js b/www/manager/form/NetworkCardSelector.js
index 616b3f8..faa0216 100644
--- a/www/manager/form/NetworkCardSelector.js
+++ b/www/manager/form/NetworkCardSelector.js
@@ -6,9 +6,9 @@ Ext.define('PVE.form.NetworkCardSelector', {
 	var me = this;
 
         me.data = [ 
-	    ['rtl8139', 'Realtec RTL8139'], 
-	    ['e1000', 'Intel E1000'],
-	    ['virtio', 'VirtIO (paravirtualized)']
+	    ['rtl8139', gettext('Realtec RTL8139')], 
+	    ['e1000', gettext('Intel E1000')],
+	    ['virtio', gettext('VirtIO (paravirtualized)')]
 	];
  
 	me.callParent();
diff --git a/www/manager/form/NodeSelector.js b/www/manager/form/NodeSelector.js
index 9e446f5..637b40e 100644
--- a/www/manager/form/NodeSelector.js
+++ b/www/manager/form/NodeSelector.js
@@ -39,19 +39,19 @@ Ext.define('PVE.form.NodeSelector', {
             listConfig: {
 		columns: [
 		    {
-			header: 'Node',
+			header: gettext('Node'),
 			dataIndex: 'name',
 			hideable: false,
 			flex: 1
 		    },
 		    {
-			header: 'Memory usage',			
+			header: gettext('Memory usage'),			
 			renderer: PVE.Utils.render_mem_usage,
 			width: 100,
 			dataIndex: 'mem'
 		    },
 		    {
-			header: 'CPU usage',
+			header: gettext('CPU usage'),
 			renderer: PVE.Utils.render_cpu,
 			sortable: true,
 			width: 100,
@@ -77,10 +77,10 @@ Ext.define('PVE.form.NodeSelector', {
 		    return true;
 		}
 
-		return "Node " + offline.join(', ') + " seems to be offline!";
+		return Ext.String.format(gettext("Node {0} seems to be offline!"), offline.join(', '));
 	    }
 	});
 
         me.callParent();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/form/RRDTypeSelector.js b/www/manager/form/RRDTypeSelector.js
index 061484d..5af2add 100644
--- a/www/manager/form/RRDTypeSelector.js
+++ b/www/manager/form/RRDTypeSelector.js
@@ -12,16 +12,16 @@ Ext.define('PVE.form.RRDTypeSelector', {
 	var store = new Ext.data.ArrayStore({
             fields: [ 'id', 'timeframe', 'cf', 'text' ],
             data : [
-		[ 'hour', 'hour', 'AVERAGE', "Hour (average)" ],
-		[ 'hourmax', 'hour', 'MAX', "Hour (max)" ],
-		[ 'day', 'day', 'AVERAGE', "Day (average)" ],
-		[ 'daymax', 'day', 'MAX', "Day (max)" ],
-		[ 'week', 'week', 'AVERAGE', "Week (average)" ],
-		[ 'weekmax', 'week', 'MAX', "Week (max)" ],
-		[ 'month', 'month', 'AVERAGE', "Month (average)" ],
-		[ 'monthmax', 'month', 'MAX', "Month (max)" ],
-		[ 'year', 'year', 'AVERAGE', "Year (average)" ],
-		[ 'yearmax', 'year', 'MAX', "Year (max)" ]
+		[ 'hour', 'hour', 'AVERAGE', gettext("Hour (average)") ],
+		[ 'hourmax', 'hour', 'MAX', gettext("Hour (max)") ],
+		[ 'day', 'day', 'AVERAGE', gettext("Day (average)") ],
+		[ 'daymax', 'day', 'MAX', gettext("Day (max)") ],
+		[ 'week', 'week', 'AVERAGE', gettext("Week (average)") ],
+		[ 'weekmax', 'week', 'MAX', gettext("Week (max)") ],
+		[ 'month', 'month', 'AVERAGE', gettext("Month (average)") ],
+		[ 'monthmax', 'month', 'MAX', gettext("Month (max)") ],
+		[ 'year', 'year', 'AVERAGE', gettext("Year (average)") ],
+		[ 'yearmax', 'year', 'MAX', gettext("Year (max)") ]
 	    ]
 	});
 
diff --git a/www/manager/form/RealmComboBox.js b/www/manager/form/RealmComboBox.js
index a25b503..2daeddd 100644
--- a/www/manager/form/RealmComboBox.js
+++ b/www/manager/form/RealmComboBox.js
@@ -14,7 +14,7 @@ Ext.define('PVE.form.RealmComboBox', {
 	});
 
 	Ext.apply(me, {
-	    fieldLabel: 'Realm',
+	    fieldLabel: gettext('Realm'),
 	    name: 'realm',
 	    store: realmstore,
 	    queryMode: 'local',
@@ -59,4 +59,4 @@ Ext.define('PVE.form.RealmComboBox', {
 	    }
 	});
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/form/StorageSelector.js b/www/manager/form/StorageSelector.js
index cadbd4f..6994e77 100644
--- a/www/manager/form/StorageSelector.js
+++ b/www/manager/form/StorageSelector.js
@@ -50,24 +50,24 @@ Ext.define('PVE.form.StorageSelector', {
             listConfig: {
 		columns: [
 		    {
-			header: 'Name',
+			header: gettext('Name'),
 			dataIndex: 'storage',
 			hideable: false,
 			flex: 1
 		    },
 		    {
-			header: 'Type',  
+			header: gettext('Type'),  
 			width: 60, 
 			dataIndex: 'type'
 		    },
 		    {
-			header: 'Avail',  
+			header: gettext('Avail'),  
 			width: 80, 
 			dataIndex: 'avail', 
 			renderer: PVE.Utils.format_size 
 		    },
 		    {
-			header: 'Capacity',  
+			header: gettext('Capacity'),  
 			width: 80, 
 			dataIndex: 'total', 
 			renderer: PVE.Utils.format_size 
@@ -82,4 +82,4 @@ Ext.define('PVE.form.StorageSelector', {
 	    me.setNodename(nodename);
 	}
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/form/VMIDSelector.js b/www/manager/form/VMIDSelector.js
index 181ada8..30114e1 100644
--- a/www/manager/form/VMIDSelector.js
+++ b/www/manager/form/VMIDSelector.js
@@ -26,7 +26,7 @@ Ext.define('PVE.form.VMIDSelector', {
 	    if (me.validateExists === false) {
 		return true;
 	    }
-	    return "This VM ID does not exists.";
+	    return gettext("This VM ID does not exists.");
 	}
     },
 
@@ -34,7 +34,7 @@ Ext.define('PVE.form.VMIDSelector', {
         var me = this;
 
 	Ext.applyIf(me, {
-	    fieldLabel: 'VM ID'
+	    fieldLabel: gettext('VM ID')
 	});
 
         me.callParent();
diff --git a/www/manager/grid/BackupView.js b/www/manager/grid/BackupView.js
index f6f0422..0ed73d7 100644
--- a/www/manager/grid/BackupView.js
+++ b/www/manager/grid/BackupView.js
@@ -9,17 +9,17 @@ Ext.define('PVE.grid.BackupView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vmtype = me.pveSelNode.data.type;
 	if (!vmtype) {
-	    throw "no VM type specified";
+	    throw gettext("no VM type specified");
 	}
 
 	var filterFn;
@@ -32,7 +32,7 @@ Ext.define('PVE.grid.BackupView', {
 		return item.data.volid.match(':backup/vzdump-qemu-');
 	    };
 	} else {
-	    throw "unsupported VM type '" + vmtype + "'";
+	    throw Ext.String.format(gettext("unsupported VM type {0}"), "'" + vmtype + "'");
 	}
 
 	me.store = Ext.create('Ext.data.Store', {
@@ -64,7 +64,7 @@ Ext.define('PVE.grid.BackupView', {
 
 	var storagesel = Ext.create('PVE.form.StorageSelector', {
 	    nodename: nodename,
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    labelAlign: 'right',
 	    storageContent: 'backup',
 	    allowBlank: false,
@@ -78,7 +78,7 @@ Ext.define('PVE.grid.BackupView', {
 	var sm = Ext.create('Ext.selection.RowModel', {});
 
 	var backup_btn = Ext.create('Ext.button.Button', {
-	    text: 'Backup now',
+	    text: gettext('Backup now'),
 	    handler: function() {
 		var win = Ext.create('PVE.window.Backup', { 
 		    nodename: nodename,
@@ -91,7 +91,7 @@ Ext.define('PVE.grid.BackupView', {
 	});
 
 	var restore_btn = Ext.create('PVE.button.Button', {
-	    text: 'Restore',
+	    text: gettext('Restore'),
 	    disabled: true,
 	    selModel: sm,
 	    enableFn: function(rec) {
@@ -113,12 +113,11 @@ Ext.define('PVE.grid.BackupView', {
 	});
 
 	var delete_btn = Ext.create('PVE.button.Button', {
-	    text: 'Delete',
+	    text: gettext('Delete'),
 	    disabled: true,
 	    selModel: sm,
 	    confirmMsg: function(rec) {
-		return 'Are you sure you want to delete "' + rec.data.volid + '"? ' +
-		    'This will permanently erase all data.';
+		return Ext.String.format(gettext('Are you sure you want to delete {0}? This will permanently erase all data.'), '"' + rec.data.volid + '"');
 	    },
 	    enableFn: function(rec) {
 		return !!rec;
@@ -135,7 +134,7 @@ Ext.define('PVE.grid.BackupView', {
 		    method: 'DELETE',
 		    waitMsgTarget: me,
 		    failure: function(response, opts) {
-			Ext.Msg.alert('Error', response.htmlStatus);
+			Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		    },
 		    success: function(response, options) {
 			reload();
@@ -150,19 +149,19 @@ Ext.define('PVE.grid.BackupView', {
 	    tbar: [ backup_btn, restore_btn, delete_btn, '->', storagesel ],
 	    columns: [
 		{
-		    header: 'Name',
+		    header: gettext('Name'),
 		    flex: 1,
 		    sortable: true,
 		    renderer: PVE.Utils.render_storage_content,
 		    dataIndex: 'volid'
 		},
 		{
-		    header: 'Format',
+		    header: gettext('Format'),
 		    width: 100,
 		    dataIndex: 'format'
 		},
 		{
-		    header: 'Size',
+		    header: gettext('Size'),
 		    width: 100,
 		    renderer: PVE.Utils.format_size,
 		    dataIndex: 'size'
diff --git a/www/manager/grid/ObjectGrid.js b/www/manager/grid/ObjectGrid.js
index 349b24b..263c1af 100644
--- a/www/manager/grid/ObjectGrid.js
+++ b/www/manager/grid/ObjectGrid.js
@@ -43,7 +43,7 @@ Ext.define('PVE.grid.ObjectGrid', {
 
 	if (!me.rstore) {
 	    if (!me.url) {
-		throw "no url specified";
+		throw gettext("no url specified");
 	    }
 
 	    me.rstore = Ext.create('PVE.data.ObjectStore', {
@@ -112,14 +112,14 @@ Ext.define('PVE.grid.ObjectGrid', {
 	    stateful: false,
 	    columns: [
 		{
-		    header: 'Name',
+		    header: gettext('Name'),
 		    width: me.cwidth1 || 100,
 		    dataIndex: 'key',
 		    renderer: me.renderKey
 		},
 		{
 		    flex: 1,
-		    header: 'Value',
+		    header: gettext('Value'),
 		    dataIndex: 'value',
 		    renderer: me.renderValue
 		}
diff --git a/www/manager/node/BCFailCnt.js b/www/manager/node/BCFailCnt.js
index 4c80d45..90845e4 100644
--- a/www/manager/node/BCFailCnt.js
+++ b/www/manager/node/BCFailCnt.js
@@ -34,12 +34,12 @@ Ext.define('PVE.node.BCFailCnt', {
 	    stateful: false,
 	    columns: [
 		{
-		    header: 'Container',
+		    header: gettext('Container'),
 		    width: 100,
 		    dataIndex: 'id'
 		},
 		{
-		    header: 'failcnt',
+		    header: gettext('failcnt'),
 		    flex: 1,
 		    dataIndex: 'failcnt'
 		}
diff --git a/www/manager/node/Config.js b/www/manager/node/Config.js
index 92af527..106aea6 100644
--- a/www/manager/node/Config.js
+++ b/www/manager/node/Config.js
@@ -7,7 +7,7 @@ Ext.define('PVE.node.Config', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	me.statusStore = Ext.create('PVE.data.ObjectStore', {
@@ -22,7 +22,7 @@ Ext.define('PVE.node.Config', {
 		method: 'POST',
 		waitMsgTarget: me,
 		failure: function(response, opts) {
-		    Ext.Msg.alert('Error', response.htmlStatus);
+		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		}
 	    });
 	};
@@ -78,7 +78,7 @@ Ext.define('PVE.node.Config', {
 		    xtype: 'pveNodeNetworkView'
 		},
 		{
-		    title: 'DNS',
+		    title: gettext('DNS'),
 		    itemId: 'dns',
 		    xtype: 'pveNodeDNSView'
 		},
@@ -88,18 +88,18 @@ Ext.define('PVE.node.Config', {
 		    xtype: 'pveNodeTimeView'
 		},
 		{
-		    title: 'Syslog',
+		    title: gettext('Syslog'),
 		    itemId: 'syslog',
 		    xtype: 'pveLogView',
 		    url: "/api2/extjs/nodes/" + nodename + "/syslog"
 		},
 		{
-		    title: 'Task History',
+		    title: gettext('Task History'),
 		    itemId: 'tasks',
 		    xtype: 'pveNodeTasks'
 		},
 		{
-		    title: 'UBC',
+		    title: gettext('UBC'),
 		    itemId: 'ubc',
 		    xtype: 'pveNodeBCFailCnt'
 		}
diff --git a/www/manager/node/DNSEdit.js b/www/manager/node/DNSEdit.js
index 84428d1..3c84612 100644
--- a/www/manager/node/DNSEdit.js
+++ b/www/manager/node/DNSEdit.js
@@ -17,27 +17,27 @@ Ext.define('PVE.node.DNSEdit', {
 	me.items = [
 	    {
 		xtype: 'textfield',
-                fieldLabel: 'Search domain',
+                fieldLabel: gettext('Search domain'),
                 name: 'search',
                 allowBlank: false
 	    },
 	    {
 		xtype: 'pvetextfield',
-                fieldLabel: 'First DNS server',
+                fieldLabel: gettext('First DNS server'),
 		vtype: 'IPAddress',
 		skipEmptyText: true,
                 name: 'dns1'
 	    },
 	    {
 		xtype: 'pvetextfield',
-		fieldLabel: 'Second DNS server',
+		fieldLabel: gettext('Second DNS server'),
 		vtype: 'IPAddress',
 		skipEmptyText: true,
                 name: 'dns2'
 	    },
 	    {
 		xtype: 'pvetextfield',
-                fieldLabel: 'Third DNS server',
+                fieldLabel: gettext('Third DNS server'),
 		vtype: 'IPAddress',
 		skipEmptyText: true,
                 name: 'dns3'
diff --git a/www/manager/node/DNSView.js b/www/manager/node/DNSView.js
index 18cff6e..815b4ed 100644
--- a/www/manager/node/DNSView.js
+++ b/www/manager/node/DNSView.js
@@ -7,7 +7,7 @@ Ext.define('PVE.node.DNSView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var run_editor = function() {
@@ -19,17 +19,17 @@ Ext.define('PVE.node.DNSView', {
 
 	Ext.applyIf(me, {
 	    url: "/api2/json/nodes/" + nodename + "/dns",
-	    cwidth1: 130,
+	    cwidth1: 200,
 	    interval: 1000,
 	    rows: {
-		search: { header: 'Search domain', required: true },
-		dns1: { header: 'First DNS server', required: true },
-		dns2: { header: 'Second DNS server' },
-		dns3: { header: 'Third DNS server' }
+		search: { header: gettext('Search domain'), required: true },
+		dns1: { header: gettext('First DNS server'), required: true },
+		dns2: { header: gettext('Second DNS server') },
+		dns3: { header: gettext('Third DNS server') }
 	    },
 	    tbar: [ 
 		{
-		    text: "Edit",
+		    text: gettext("Edit"),
 		    handler: run_editor
 		}
 	    ],
diff --git a/www/manager/node/NetworkEdit.js b/www/manager/node/NetworkEdit.js
index 33a35c8..0fb4b6c 100644
--- a/www/manager/node/NetworkEdit.js
+++ b/www/manager/node/NetworkEdit.js
@@ -7,11 +7,11 @@ Ext.define('PVE.node.NetworkEdit', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.iftype) {
-	    throw "no network device type specified";
+	    throw gettext("no network device type specified");
 	}
 
 	me.create = !me.iface;
@@ -21,22 +21,22 @@ Ext.define('PVE.node.NetworkEdit', {
 
 	if (me.create) {
 	    if (me.iftype === 'bridge') {
-		title = "Create Bridge";
+		title = gettext("Create Bridge");
 		iface_vtype = 'BridgeName';
 	    } else if (me.iftype === 'bond') {
-		title = "Create Bond";
+		title = gettext("Create Bond");
 		iface_vtype = 'BondName';
 	    } else {
-		throw "can't create unknown device type";
+		throw gettext("can't create unknown device type");
 	    }
 	} else {
-	    title = "Edit network device '" + me.iface + "'";
+	    title = Ext.String.format(gettext("Edit network device {0}"), "'" + me.iface + "'");
 	}
 
 	var column2 = [
 	    {
 		xtype: 'pvecheckbox',
-		fieldLabel: 'Autostart',
+		fieldLabel: gettext('Autostart'),
 		name: 'autostart',
 		uncheckedValue: 0,
 		checked: me.create ? true : undefined
@@ -46,18 +46,18 @@ Ext.define('PVE.node.NetworkEdit', {
 	if (me.iftype === 'bridge') {
 	    column2.push({
 		xtype: 'textfield',
-		fieldLabel: 'Bridge ports',
+		fieldLabel: gettext('Bridge ports'),
 		name: 'bridge_ports'
 	    });	  
 	} else if (me.iftype === 'bond') {
 	    column2.push({
 		xtype: 'textfield',
-		fieldLabel: 'Slaves',
+		fieldLabel: gettext('Slaves'),
 		name: 'slaves'
 	    });
 	    column2.push({
 		xtype: 'bondModeSelector',
-		fieldLabel: 'Mode',
+		fieldLabel: gettext('Mode'),
 		name: 'bond_mode',
 		value: me.create ? 'balance-rr' : undefined,
 		allowBlank: false
@@ -78,7 +78,7 @@ Ext.define('PVE.node.NetworkEdit', {
 	var column1 = [
 	    {
 		xtype: me.create ? 'textfield' : 'displayfield',
-		fieldLabel: 'Name',
+		fieldLabel: gettext('Name'),
 		height: 22, // hack: set same height as text fields
 		name: 'iface',
 		value: me.iface,
@@ -88,14 +88,14 @@ Ext.define('PVE.node.NetworkEdit', {
 	    {
 		xtype: 'pvetextfield',
 		deleteEmpty: !me.create,
-		fieldLabel: 'IP address',
+		fieldLabel: gettext('IP address'),
 		vtype: 'IPAddress',
 		name: 'address'
 	    },
 	    {
 		xtype: 'pvetextfield',
 		deleteEmpty: !me.create,
-		fieldLabel: 'Subnet mask',
+		fieldLabel: gettext('Subnet mask'),
 		vtype: 'IPAddress',
 		name: 'netmask',
 		validator: function(value) {
@@ -106,11 +106,11 @@ Ext.define('PVE.node.NetworkEdit', {
 		    var address = me.down('field[name=address]').getValue();
 		    if (value !== '') {
 			if (address === '') {
-			    return "Subnet mask requires option 'IP address'";
+			    return gettext("Subnet mask requires option 'IP address'");
 			}
 		    } else {
 			if (address !== '') {
-			    return "Option 'IP address' requires a subnet mask";
+			    return gettext("Option 'IP address' requires a subnet mask");
 			}
 		    }
 		    
@@ -120,7 +120,7 @@ Ext.define('PVE.node.NetworkEdit', {
 	    {
 		xtype: 'pvetextfield',
 		deleteEmpty: !me.create,
-		fieldLabel: 'Gateway',
+		fieldLabel: gettext('Gateway'),
 		vtype: 'IPAddress',
 		name: 'gateway'
 	    }
@@ -146,8 +146,8 @@ Ext.define('PVE.node.NetworkEdit', {
 		success: function(response, options) {
 		    var data = response.result.data;
 		    if (data.type !== me.iftype) {
-			var msg = "Got unexpected device type";
-			Ext.Msg.alert("Load failed", msg, function() {
+			var msg = gettext("Got unexpected device type");
+			Ext.Msg.alert(gettext("Load failed"), msg, function() {
 			    me.close();
 			});
 			return;
diff --git a/www/manager/node/NetworkView.js b/www/manager/node/NetworkView.js
index 3db0e43..9c5a812 100644
--- a/www/manager/node/NetworkView.js
+++ b/www/manager/node/NetworkView.js
@@ -8,7 +8,7 @@ Ext.define('PVE.node.NetworkView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var rstore = Ext.create('PVE.data.UpdateStore', {
@@ -34,13 +34,13 @@ Ext.define('PVE.node.NetworkView', {
 	    PVE.Utils.API2Request({
 		url: '/nodes/' + nodename + '/network_changes',
 		failure: function(response, opts) {
-		    changeitem.update('Error: ' + response.htmlStatus);
+		    changeitem.update(gettext('Error') +': ' + response.htmlStatus);
 		},
 		success: function(response, opts) {
 		    var result = Ext.decode(response.responseText);
 		    var data = result.data;
 		    if (data === '') {
-			data = "no changes";
+			data = gettext("no changes");
 		    }
 		    changeitem.update("<pre>" + Ext.htmlEncode(data) + "</pre>");
 		}
@@ -70,13 +70,13 @@ Ext.define('PVE.node.NetworkView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
 
 	var del_btn = new Ext.Button({
-	    text: 'Delete',
+	    text: gettext('Delete'),
 	    disabled: true,
 	    handler: function(){
 		var grid = me.down('gridpanel');
@@ -96,7 +96,7 @@ Ext.define('PVE.node.NetworkView', {
 			reload();
 		    },
 		    failure: function(response, opts) {
-			Ext.Msg.alert('Error', response.htmlStatus);
+			Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		    }
 		});
 	    }
@@ -113,7 +113,7 @@ Ext.define('PVE.node.NetworkView', {
 
 	me.mon(rstore, 'load', function(s, records, success) {
 	    if (!success) {
-		me.setLoading("Data load error");
+		me.setLoading(gettext("Data load error"));
 		return;
 	    } else {
 		me.setLoading(false);
@@ -132,11 +132,11 @@ Ext.define('PVE.node.NetworkView', {
 	    layout: 'border',
 	    tbar: [
 		{
-		    text: 'Create',
+		    text: gettext('Create'),
 		    menu: new Ext.menu.Menu({
 			items: [
 			    {
-				text: 'Bridge',
+				text: gettext('Bridge'),
 				handler: function() {
 				    var next;
 				    for (next = 0; next <= 9999; next++) {
@@ -155,7 +155,7 @@ Ext.define('PVE.node.NetworkView', {
 				}
 			    },
 			    {
-				text: 'Bond',
+				text: gettext('Bond'),
 				handler: function() {
 				    var next;
 				    for (next = 0; next <= 9999; next++) {
@@ -176,7 +176,7 @@ Ext.define('PVE.node.NetworkView', {
 		    })
 		}, ' ', 
 		{
-		    text: 'Revert changes',
+		    text: gettext('Revert changes'),
 		    handler: function() {
 			PVE.Utils.API2Request({
 			    url: '/nodes/' + nodename + '/network_changes',
@@ -186,7 +186,7 @@ Ext.define('PVE.node.NetworkView', {
 				reload();
 			    },
 			    failure: function(response, opts) {
-				Ext.Msg.alert('Error', response.htmlStatus);
+				Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 			    }
 			});
 		    }
@@ -203,48 +203,48 @@ Ext.define('PVE.node.NetworkView', {
 		    border: false,
 		    columns: [
 			{
-			    header: 'Interface Name',
+			    header: gettext('Interface Name'),
 			    width: 100,
 			    sortable: true,
 			    dataIndex: 'iface'
 			},
 			{
 			    xtype: 'booleancolumn', 
-			    header: 'Active',
+			    header: gettext('Active'),
 			    width: 80,
 			    sortable: true,
 			    dataIndex: 'active',
-			    trueText: 'Yes',
-			    falseText: 'No',
-			    undefinedText: 'No'
+			    trueText: gettext('Yes'),
+			    falseText: gettext('No'),
+			    undefinedText: gettext('No')
 			},
 			{
 			    xtype: 'booleancolumn', 
-			    header: 'Autostart',
+			    header: gettext('Autostart'),
 			    width: 80,
 			    sortable: true,
 			    dataIndex: 'autostart',
-			    trueText: 'Yes',
-			    falseText: 'No',
-			    undefinedText: 'No'
+			    trueText: gettext('Yes'),
+			    falseText: gettext('No'),
+			    undefinedText: gettext('No')
 			},
 			{
-			    header: 'Ports/Slaves',
+			    header: gettext('Ports/Slaves'),
 			    dataIndex: 'type',
 			    renderer: render_ports
 			},
 			{
-			    header: 'IP address',
+			    header: gettext('IP address'),
 			    sortable: true,
 			    dataIndex: 'address'
 			},
 			{
-			    header: 'Subnet mask',
+			    header: gettext('Subnet mask'),
 			    sortable: true,
 			    dataIndex: 'netmask'
 			},
 			{
-			    header: 'Gateway',
+			    header: gettext('Gateway'),
 			    sortable: true,
 			    dataIndex: 'gateway'
 			}
@@ -260,12 +260,12 @@ Ext.define('PVE.node.NetworkView', {
 		    autoScroll: true,
 		    itemId: 'changes',
 		    tbar: [ 
-			'Pending changes (please reboot to activate changes)'
+			gettext('Pending changes (please reboot to activate changes)')
 		    ],
 		    split: true, 
 		    bodyPadding: 5,
 		    flex: 0.6,
-		    html: "no changes"
+		    html: gettext("no changes")
 		}
 	    ],
 	    listeners: {
@@ -288,4 +288,4 @@ Ext.define('PVE.node.NetworkView', {
     });
 
 });
-    
\ No newline at end of file
+    
diff --git a/www/manager/node/ServiceView.js b/www/manager/node/ServiceView.js
index eaa5840..c2b1a19 100644
--- a/www/manager/node/ServiceView.js
+++ b/www/manager/node/ServiceView.js
@@ -8,7 +8,7 @@ Ext.define('PVE.node.ServiceView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var rstore = Ext.create('PVE.data.UpdateStore', {
@@ -30,7 +30,7 @@ Ext.define('PVE.node.ServiceView', {
 		url: "/nodes/" + nodename + "/services/" + rec.data.service + "/" + cmd,
 		method: 'POST',
 		failure: function(response, opts) {
-		    Ext.Msg.alert('Error', response.htmlStatus);
+		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		    me.loading = true;
 		},
 		success: function(response, opts) {
@@ -46,7 +46,7 @@ Ext.define('PVE.node.ServiceView', {
 	};
 
 	var start_btn = new Ext.Button({
-	    text: 'Start',
+	    text: gettext('Start'),
 	    disabled: true,
 	    handler: function(){
 		service_cmd("start");
@@ -54,7 +54,7 @@ Ext.define('PVE.node.ServiceView', {
 	});
 
 	var stop_btn = new Ext.Button({
-	    text: 'Stop',
+	    text: gettext('Stop'),
 	    disabled: true,
 	    handler: function(){
 		service_cmd("stop");
@@ -62,7 +62,7 @@ Ext.define('PVE.node.ServiceView', {
 	});
 
 	var restart_btn = new Ext.Button({
-	    text: 'Restart',
+	    text: gettext('Restart'),
 	    disabled: true,
 	    handler: function(){
 		service_cmd("restart");
@@ -109,7 +109,7 @@ Ext.define('PVE.node.ServiceView', {
 
 	me.mon(rstore, 'load', function(s, records, success) {
 	    if (!success) {
-		me.setLoading("Data load error");
+		me.setLoading(gettext("Data load error"));
 		return;
 	    } else {
 		me.setLoading(false);
@@ -122,19 +122,19 @@ Ext.define('PVE.node.ServiceView', {
 	    tbar: [ start_btn, stop_btn, restart_btn ],
 	    columns: [
 		{
-		    header: 'Name',
+		    header: gettext('Name'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'name'
 		},
 		{
-		    header: 'State',
+		    header: gettext('State'),
 		    width: 100,
 		    sortable: true,
 		    dataIndex: 'state'
 		},
 		{
-		    header: 'Description',
+		    header: gettext('Description'),
 		    dataIndex: 'desc',
 		    flex: 1
 		}
@@ -158,4 +158,4 @@ Ext.define('PVE.node.ServiceView', {
     });
 
 });
-    
\ No newline at end of file
+    
diff --git a/www/manager/node/StatusView.js b/www/manager/node/StatusView.js
index 34a805f..f98581d 100644
--- a/www/manager/node/StatusView.js
+++ b/www/manager/node/StatusView.js
@@ -7,7 +7,7 @@ Ext.define('PVE.node.StatusView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var render_cpuinfo = function(value) {
@@ -25,26 +25,26 @@ Ext.define('PVE.node.StatusView', {
 
 	var render_meminfo = function(value) {
 	    var per = (value.used / value.total)*100;
-	    var text = "<div>Total: " + PVE.Utils.format_size(value.total) + "</div>" + 
-		"<div>Used: " + PVE.Utils.format_size(value.used) + "</div>";
+	    var text = "<div>" + gettext("Total") + ": " + PVE.Utils.format_size(value.total) + "</div>" + 
+		"<div>" + gettext("Used") + ": " + PVE.Utils.format_size(value.used) + "</div>";
 	    return text;
 	};
 
 	var rows = {
-	    uptime: { header: 'Uptime', required: true, renderer: PVE.Utils.format_duration_long },
-	    loadavg: { header: 'Load average', required: true, renderer: render_loadavg },
-	    cpuinfo: { header: 'CPUs', required: true, renderer: render_cpuinfo },
-	    cpu: { header: 'CPU usage',required: true,  renderer: render_cpu },
-	    wait: { header: 'IO delay', required: true, renderer: render_cpu },
-	    memory: { header: 'RAM usage', required: true, renderer: render_meminfo },
-	    swap: { header: 'SWAP usage', required: true, renderer: render_meminfo },
-	    rootfs: { header: 'HD space (root)', required: true, renderer: render_meminfo },
-	    pveversion: { header: 'PVE Manager version', required: true },
-	    kversion: { header: 'Kernel version', required: true }
+	    uptime: { header: gettext('Uptime'), required: true, renderer: PVE.Utils.format_duration_long },
+	    loadavg: { header: gettext('Load average'), required: true, renderer: render_loadavg },
+	    cpuinfo: { header: gettext('CPUs'), required: true, renderer: render_cpuinfo },
+	    cpu: { header: gettext('CPU usage'),required: true,  renderer: render_cpu },
+	    wait: { header: gettext('IO delay'), required: true, renderer: render_cpu },
+	    memory: { header: gettext('RAM usage'), required: true, renderer: render_meminfo },
+	    swap: { header: gettext('SWAP usage'), required: true, renderer: render_meminfo },
+	    rootfs: { header: gettext('HD space (root)'), required: true, renderer: render_meminfo },
+	    pveversion: { header: gettext('PVE Manager version'), required: true },
+	    kversion: { header: gettext('Kernel version'), required: true }
 	};
 
 	Ext.applyIf(me, {
-	    cwidth1: 150,
+	    cwidth1: 200,
 	    //height: 276,
 	    rows: rows
 	});
diff --git a/www/manager/node/Summary.js b/www/manager/node/Summary.js
index 0466874..a0aa7aa 100644
--- a/www/manager/node/Summary.js
+++ b/www/manager/node/Summary.js
@@ -7,17 +7,17 @@ Ext.define('PVE.node.Summary', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.statusStore) {
-	    throw "no status storage specified";
+	    throw gettext("no status storage specified");
 	}
 
 	var rstore = me.statusStore;
 
 	var statusview = Ext.create('PVE.node.StatusView', {
-	    title: 'Status',
+	    title: gettext('Status'),
 	    pveSelNode: me.pveSelNode,
 	    style: 'padding-top:0px',
 	    rstore: rstore
@@ -37,25 +37,25 @@ Ext.define('PVE.node.Summary', {
 		statusview,
 		{
 		    xtype: 'pveRRDView',
-		    title: "CPU usage %",
+		    title: gettext("CPU usage %"),
 		    datasource: 'cpu,iowait',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Server load",
+		    title: gettext("Server load"),
 		    datasource: 'loadavg',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Memory usage",
+		    title: gettext("Memory usage"),
 		    datasource: 'memtotal,memused',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Network traffic",
+		    title: gettext("Network traffic"),
 		    datasource: 'netin,netout',
 		    rrdurl: rrdurl
 		}
diff --git a/www/manager/node/Tasks.js b/www/manager/node/Tasks.js
index 8664293..18e2a2f 100644
--- a/www/manager/node/Tasks.js
+++ b/www/manager/node/Tasks.js
@@ -8,7 +8,7 @@ Ext.define('PVE.node.Tasks', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var store = Ext.create('Ext.data.Store', {
@@ -144,10 +144,10 @@ Ext.define('PVE.node.Tasks', {
 		    width: 200,
 		    renderer: function(value, metaData, record) { 
 			if (value == 'OK') {
-			    return 'OK';
+			    return gettext('OK');
 			}
 			// metaData.attr = 'style="color:red;"'; 
-			return "ERROR: " + value;
+			return gettext("ERROR") + ": " + value;
 		    }
 		}
 	    ],
diff --git a/www/manager/node/TimeEdit.js b/www/manager/node/TimeEdit.js
index ae9ec02..681ccb9 100644
--- a/www/manager/node/TimeEdit.js
+++ b/www/manager/node/TimeEdit.js
@@ -8,7 +8,7 @@ Ext.define('PVE.node.TimeEdit', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	Ext.applyIf(me, {
@@ -20,7 +20,7 @@ Ext.define('PVE.node.TimeEdit', {
 	    width: 400,
 	    items: {
 		xtype: 'combo',
-		fieldLabel: 'Time zone',
+		fieldLabel: gettext('Time zone'),
 		name: 'timezone',
 		queryMode: 'local',
 		store: new PVE.data.TimezoneStore({autoDestory: true}),
diff --git a/www/manager/node/TimeView.js b/www/manager/node/TimeView.js
index 6baf25a..ca58578 100644
--- a/www/manager/node/TimeView.js
+++ b/www/manager/node/TimeView.js
@@ -7,7 +7,7 @@ Ext.define('PVE.node.TimeView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var tzoffset = (new Date()).getTimezoneOffset()*60000;
@@ -29,18 +29,18 @@ Ext.define('PVE.node.TimeView', {
 	    interval: 1000,
 	    rows: {
 		timezone: { 
-		    header: 'Time zone', 
+		    header: gettext('Time zone'), 
 		    required: true
 		},
 		localtime: { 
-		    header: 'Server time', 
+		    header: gettext('Server time'), 
 		    required: true, 
 		    renderer: renderlocaltime 
 		}
 	    },
 	    tbar: [ 
 		{
-		    text: "Edit",
+		    text: gettext("Edit"),
 		    handler: run_editor
 		}
 	    ],
diff --git a/www/manager/openvz/BeanCounterGrid.js b/www/manager/openvz/BeanCounterGrid.js
index a1baa37..aaa031a 100644
--- a/www/manager/openvz/BeanCounterGrid.js
+++ b/www/manager/openvz/BeanCounterGrid.js
@@ -23,7 +23,7 @@ Ext.define('PVE.openvz.BeanCounterGrid', {
 	var me = this;
 
 	if (!me.url) {
-	    throw "no url specified";
+	    throw gettext("no url specified");
 	}
 
 	var store = new Ext.data.Store({
@@ -49,36 +49,36 @@ Ext.define('PVE.openvz.BeanCounterGrid', {
 	    stateful: false,
 	    columns: [
 		{
-		    header: 'Ressource',
+		    header: gettext('Ressource'),
 		    width: 100,
 		    dataIndex: 'id'
 		},
 		{
-		    header: 'held',
+		    header: gettext('held'),
 		    width: 100,
 		    renderer: me.renderUbc,
 		    dataIndex: 'held'
 		},
 		{
-		    header: 'maxheld',
+		    header: gettext('maxheld'),
 		    width: 100,
 		    renderer: me.renderUbc,
 		    dataIndex: 'maxheld'
 		},
 		{
-		    header: 'barrier',
+		    header: gettext('barrier'),
 		    width: 100,
 		    renderer: me.renderUbc,
 		    dataIndex: 'bar'
 		},
 		{
-		    header: 'limit',
+		    header: gettext('limit'),
 		    width: 100,
 		    renderer: me.renderUbc,
 		    dataIndex: 'lim'
 		},
 		{
-		    header: 'failcnt',
+		    header: gettext('failcnt'),
 		    width: 100,
 		    dataIndex: 'failcnt'
 		}
diff --git a/www/manager/openvz/CmdMenu.js b/www/manager/openvz/CmdMenu.js
index cffeaf6..049ac45 100644
--- a/www/manager/openvz/CmdMenu.js
+++ b/www/manager/openvz/CmdMenu.js
@@ -6,12 +6,12 @@ Ext.define('PVE.openvz.CmdMenu', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vmname = me.pveSelNode.data.name;
@@ -22,7 +22,7 @@ Ext.define('PVE.openvz.CmdMenu', {
 		url: '/nodes/' + nodename + '/openvz/' + vmid + "/status/" + cmd,
 		method: 'POST',
 		failure: function(response, opts) {
-		    Ext.Msg.alert('Error', response.htmlStatus);
+		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		}
 	    });
 	};
diff --git a/www/manager/openvz/Config.js b/www/manager/openvz/Config.js
index c99399f..6a1438b 100644
--- a/www/manager/openvz/Config.js
+++ b/www/manager/openvz/Config.js
@@ -7,12 +7,12 @@ Ext.define('PVE.openvz.Config', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	me.statusStore = Ext.create('PVE.data.ObjectStore', {
diff --git a/www/manager/openvz/CreateWizard.js b/www/manager/openvz/CreateWizard.js
index c5722f0..fb807ed 100644
--- a/www/manager/openvz/CreateWizard.js
+++ b/www/manager/openvz/CreateWizard.js
@@ -23,7 +23,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 
 	var storagesel = Ext.create('PVE.form.StorageSelector', {
 	    name: 'storage',
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    storageContent: 'rootdir',
 	    autoSelect: true,
 	    allowBlank: false
@@ -32,13 +32,13 @@ Ext.define('PVE.openvz.CreateWizard', {
 	var tmplsel = Ext.create('PVE.form.FileSelector', {
 	    name: 'ostemplate',
 	    storageContent: 'vztmpl',
-	    fieldLabel: 'OS template',
+	    fieldLabel: gettext('OS template'),
 	    allowBlank: false
 	});
 
 	var tmplstoragesel = Ext.create('PVE.form.StorageSelector', {
 	    name: 'tmplstorage',
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    storageContent: 'vztmpl',
 	    autoSelect: true,
 	    allowBlank: false,
@@ -51,7 +51,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 
 	var bridgesel = Ext.create('PVE.form.BridgeSelector', {
 	    name: 'bridge',
-	    fieldLabel: 'Bridge',
+	    fieldLabel: gettext('Bridge'),
 	    labelAlign: 'right',
 	    autoSelect: true,
 	    disabled: true,
@@ -59,7 +59,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 	});
 
 	Ext.applyIf(me, {
-	    title: 'Create new container',
+	    title: gettext('Create new container'),
 	    items: [
 		{
 		    xtype: 'inputpanel',
@@ -68,7 +68,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			{
 			    xtype: 'PVE.form.NodeSelector',
 			    name: 'nodename',
-			    fieldLabel: 'Node',
+			    fieldLabel: gettext('Node'),
 			    allowBlank: false,
 			    onlineValidator: true,
 			    listeners: {
@@ -90,7 +90,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			    xtype: 'pvetextfield',
 			    name: 'hostname',
 			    value: '',
-			    fieldLabel: 'Hostname',
+			    fieldLabel: gettext('Hostname'),
 			    skipEmptyText: true,
 			    allowBlank: true
 			}
@@ -102,7 +102,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			    inputType: 'password',
 			    name: 'password',
 			    value: '',
-			    fieldLabel: 'Password',
+			    fieldLabel: gettext('Password'),
 			    allowBlank: false,
 			    minLength: 5,
 			    change: function(f, value) {
@@ -117,12 +117,12 @@ Ext.define('PVE.openvz.CreateWizard', {
 			    inputType: 'password',
 			    name: 'confirmpw',
 			    value: '',
-			    fieldLabel: 'Confirm password',
+			    fieldLabel: gettext('Confirm password'),
 			    allowBlank: false,
 			    validator: function(value) {
 				var pw = me.down('field[name=password]').getValue();
 				if (pw !== value) {
-				    return "Passowords does not match!";
+				    return gettext("Passowords does not match!");
 				}
 				return true;
 			    }
@@ -135,22 +135,22 @@ Ext.define('PVE.openvz.CreateWizard', {
 		},
 		{
 		    xtype: 'inputpanel',
-		    title: 'Template',
+		    title: gettext('Template'),
 		    column1: [ tmplstoragesel, tmplsel]
 		},
 		{
 		    xtype: 'pveOpenVZResourceInputPanel',
-		    title: 'Resources'
+		    title: gettext('Resources')
 		},
 		{
 		    xtype: 'inputpanel',
-		    title: 'Network',
+		    title: gettext('Network'),
 		    column1: [
 			{
 			    xtype: 'radiofield',
 			    name: 'networkmode',
 			    inputValue: 'routed',
-			    boxLabel: 'Routed mode (venet)',
+			    boxLabel: gettext('Routed mode (venet)'),
 			    checked: true,
 			    listeners: {
 				change: function(f, value) {
@@ -167,7 +167,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			    name: 'ip_address',
 			    vtype: 'IPAddress',
 			    value: '',
-			    fieldLabel: 'IP address',
+			    fieldLabel: gettext('IP address'),
 			    labelAlign: 'right',
 			    allowBlank: false
 			}
@@ -177,7 +177,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			    xtype: 'radiofield',
 			    name: 'networkmode',
 			    inputValue: 'bridge',
-			    boxLabel: 'Bridged mode',
+			    boxLabel: gettext('Bridged mode'),
 			    checked: false,
 			    listeners: {
 				change: function(f, value) {
@@ -201,13 +201,13 @@ Ext.define('PVE.openvz.CreateWizard', {
 		},
 		{
 		    xtype: 'inputpanel',
-		    title: 'DNS',
+		    title: gettext('DNS'),
 		    column1: [
 			{
 			    xtype: 'pvetextfield',
 			    name: 'searchdomain',
 			    skipEmptyText: true,
-			    fieldLabel: 'DNS domain',
+			    fieldLabel: gettext('DNS domain'),
 			    emptyText: 'use host settings',
 			    allowBlank: true,
 			    listeners: {
@@ -226,7 +226,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			},
 			{
 			    xtype: 'pvetextfield',
-			    fieldLabel: 'DNS server 1',
+			    fieldLabel: gettext('DNS server 1'),
 			    vtype: 'IPAddress',
 			    allowBlank: true,
 			    disabled: true,
@@ -235,7 +235,7 @@ Ext.define('PVE.openvz.CreateWizard', {
 			},
 			{
 			    xtype: 'pvetextfield',
-			    fieldLabel: 'DNS server 2',
+			    fieldLabel: gettext('DNS server 2'),
 			    vtype: 'IPAddress',
 			    skipEmptyText: true,
 			    disabled: true,
@@ -245,16 +245,16 @@ Ext.define('PVE.openvz.CreateWizard', {
 		    ]
 		},
 		{
-		    title: 'Confirm',
+		    title: gettext('Confirm'),
 		    layout: 'fit',
 		    items: [
 			{
-			    title: 'Settings',
+			    title: gettext('Settings'),
 			    xtype: 'grid',
 			    store: summarystore,
 			    columns: [
-				{header: 'Key', width: 150, dataIndex: 'key'},
-				{header: 'Value', flex: 1, dataIndex: 'value'}
+				{header: gettext('Key'), width: 150, dataIndex: 'key'},
+				{header: gettext('Value'), flex: 1, dataIndex: 'value'}
 			    ]
 			}
 		    ],
diff --git a/www/manager/openvz/DNS.js b/www/manager/openvz/DNS.js
index dbf72ea..4eec27f 100644
--- a/www/manager/openvz/DNS.js
+++ b/www/manager/openvz/DNS.js
@@ -9,56 +9,56 @@ Ext.define('PVE.openvz.DNS', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var rows = {
 	    hostname: {
 		required: true,
 		defaultValue: me.pveSelNode.data.name,
-		header: 'Hostname',
+		header: gettext('Hostname'),
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Container Hostname',
+		    title: gettext('Container Hostname'),
 		    items: {
 			xtype: 'textfield',
 			name: 'hostname',
 			value: '',
-			fieldLabel: 'Hostname',
+			fieldLabel: gettext('Hostname'),
 			allowBlank: true,
 			emptyText: me.pveSelNode.data.name
 		    }
 		}
 	    },
 	    searchdomain: {
-		header: 'DNS domain',
+		header: gettext('DNS domain'),
 		defaultValue: '',
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'DNS domain',
+		    title: gettext('DNS domain'),
 		    items: {
 			xtype: 'pvetextfield',
 			name: 'searchdomain',
-			fieldLabel: 'DNS domain',
+			fieldLabel: gettext('DNS domain'),
 			allowBlank: false
 		    }
 		}
 	    },
 	    nameserver: {
-		header: 'DNS servers',
+		header: gettext('DNS servers'),
 		defaultValue: '',
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'DNS servers',
+		    title: gettext('DNS servers'),
 		    items: {
 			xtype: 'pvetextfield',
 			name: 'nameserver',
-			fieldLabel: 'DNS servers',
+			fieldLabel: gettext('DNS servers'),
 			allowBlank: false
 		    }
 		}
@@ -96,7 +96,7 @@ Ext.define('PVE.openvz.DNS', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
diff --git a/www/manager/openvz/Network.js b/www/manager/openvz/Network.js
index e8ba347..87598d1 100644
--- a/www/manager/openvz/Network.js
+++ b/www/manager/openvz/Network.js
@@ -20,11 +20,11 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 	var me = this;
 
 	if (!me.dataCache) {
-	    throw "no dataCache specified";
+	    throw gettext("no dataCache specified");
 	}
 
 	if (!me.nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 	
 	me.netif = PVE.Parser.parseOpenVZNetIf(me.dataCache.netif) || {};
@@ -33,16 +33,16 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 
 	if (!me.create) {
 	    if (!me.ifname) {
-		throw "no interface name specified";
+		throw gettext("no interface name specified");
 	    }
 	    cdata = me.netif[me.ifname];
 	    if (!cdata) {
-		throw "no such interface '" + me.ifname + "'";
+		throw Ext.Strings.format(gettext("no such interface {0}"), "'" + me.ifname + "'");
 	    }
 	}
 
 	Ext.apply(me, {
-	    title: me.create ? 'Add ethernet device (veth)' : 'Edit ethernet device (veth)',
+	    title: me.create ? gettext('Add ethernet device (veth)') : gettext('Edit ethernet device (veth)'),
 	    digest: me.dataCache.digest,
 	    width: 350,
 	    fieldDefaults: {
@@ -53,12 +53,12 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 		    xtype: me.create ? 'textfield' : 'displayfield',
 		    name: 'ifname',
 		    height: 22, // hack: set same height as text fields
-		    fieldLabel: 'Device name',
+		    fieldLabel: gettext('Device name'),
 		    allowBlank: false,
 		    value: cdata.ifname,
 		    validator: function(value) {
 			if (me.create && me.netif[value]) {
-			    return "interface name already in use";
+			    return gettext("interface name already in use");
 			}
 			return true;
 		    }
@@ -66,7 +66,7 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 		{
 		    xtype: 'textfield',
 		    name: 'mac',
-		    fieldLabel: 'MAC address',
+		    fieldLabel: gettext('MAC address'),
 		    vtype: 'MacAddress',
 		    value: cdata.mac,
 		    allowBlank: me.create,
@@ -76,14 +76,14 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 		    xtype: 'PVE.form.BridgeSelector',
 		    name: 'bridge',
 		    nodename: me.nodename,
-		    fieldLabel: 'Bridge',
+		    fieldLabel: gettext('Bridge'),
 		    value: cdata.bridge,
 		    allowBlank: false
 		},
 		{
 		    xtype: 'textfield',
 		    name: 'host_ifname',
-		    fieldLabel: 'Host device name',
+		    fieldLabel: gettext('Host device name'),
 		    value: cdata.host_ifname,
 		    allowBlank: true,
 		    emptyText: 'auto'
@@ -91,7 +91,7 @@ Ext.define('PVE.OpenVZ.NetIfEdit', {
 		{
 		    xtype: 'textfield',
 		    name: 'host_mac',
-		    fieldLabel: 'Host MAC address',
+		    fieldLabel: gettext('Host MAC address'),
 		    vtype: 'MacAddress',
 		    value: cdata.host_mac,
 		    allowBlank: true,
@@ -124,17 +124,17 @@ Ext.define('PVE.OpenVZ.IPAdd', {
 	var me = this;
 
 	if (!me.dataCache) {
-	    throw "no dataCache specified";
+	    throw gettext("no dataCache specified");
 	}
 
 	Ext.apply(me, {
-	    title: "Add IP address (venet)",
+	    title: gettext("Add IP address (venet)"),
 	    digest: me.dataCache.digest,
 	    width: 350,
 	    items: {
 		xtype: 'textfield',
 		name: 'ipaddress',
-		fieldLabel: 'IP Address',
+		fieldLabel: gettext('IP Address'),
 		vtype: 'IPAddress',
 		allowBlank: false
 	    }
@@ -156,11 +156,11 @@ Ext.define('PVE.openvz.NetworkView', {
 
     renderType: function(value, metaData, record, rowIndex, colIndex, store) {
 	if (value === 'ip') {
-	    return 'IP address';
+	    return gettext('IP address');
 	} else if (value === 'net') {
-	    return 'IP network';
+	    return gettext('IP network');
 	} else if (value === 'veth') {
-	    return 'Ethernet device';
+	    return gettext('Ethernet device');
 	} else {
 	    return value;
 	}
@@ -183,7 +183,7 @@ Ext.define('PVE.openvz.NetworkView', {
 	PVE.Utils.API2Request({
 	    url: me.url,
 	    failure: function(response, opts) {
-		me.setLoading('Error: ' + response.htmlStatus);
+		me.setLoading(gettext('Error') + ': ' + response.htmlStatus);
 	    },
 	    success: function(response, opts) {
 		me.setLoading(false);
@@ -226,12 +226,12 @@ Ext.define('PVE.openvz.NetworkView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	me.url = '/nodes/' + nodename + '/openvz/' + vmid + '/config';
@@ -241,7 +241,7 @@ Ext.define('PVE.openvz.NetworkView', {
 	});
 
 	var remove_btn = new Ext.Button({
-	    text: 'Remove',
+	    text: gettext('Remove'),
 	    disabled: true,
 	    handler: function(){
 		var sm = me.getSelectionModel();
@@ -253,14 +253,14 @@ Ext.define('PVE.openvz.NetworkView', {
 
 		var msg;
 		if (rec.data.type === 'ip') {
-		    msg = 'Are you sure you want to remove IP address "' + rec.data.value + '"';
+		    msg = Ext.String.format(gettext('Are you sure you want to remove IP address {0}'), '"' + rec.data.value + '"');
 		} else if (rec.data.type === 'veth') {
-		    msg = 'Are you sure you want to remove device "' + rec.data.id + '"';
+		    msg = Ext.String.format(gettext('Are you sure you want to remove device {0}'), '"' + rec.data.id + '"');
 		} else {
-		    msg = 'Are you sure you want to remove this item';		    
+		    msg = gettext('Are you sure you want to remove this item');		    
 		}
 
-		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 		    if (btn !== 'yes') {
 			return;
 		    }
@@ -317,7 +317,7 @@ Ext.define('PVE.openvz.NetworkView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
@@ -342,7 +342,7 @@ Ext.define('PVE.openvz.NetworkView', {
 	    //hideHeaders: true,
 	    tbar: [
 		{
-		    text: 'Add',
+		    text: gettext('Add'),
 		    menu: new Ext.menu.Menu({
 			items: [
 			    {
@@ -359,7 +359,7 @@ Ext.define('PVE.openvz.NetworkView', {
 				}
 			    },
 			    {
-				text: 'Ethernet device (veth)',
+				text: gettext('Ethernet device (veth)'),
 				//plain: true,
 				//iconCls: 'pve-itype-icon-storage',
 				handler: function() {
@@ -381,34 +381,34 @@ Ext.define('PVE.openvz.NetworkView', {
 	    ],
 	    columns: [
 		{
-		    header: 'Type',
+		    header: gettext('Type'),
 		    width: 110,
 		    dataIndex: 'type',
 		    renderer: me.renderType
 		},
 		{
-		    header: 'IP/Name',
+		    header: gettext('IP/Name'),
 		    width: 110,
 		    dataIndex: 'value',
 		    renderer: me.renderValue
 		},
 		{
-		    header: 'Bridge',
+		    header: gettext('Bridge'),
 		    width: 110,
 		    dataIndex: 'bridge'
 		},
 		{
-		    header: 'MAC',
+		    header: gettext('MAC'),
 		    width: 110,
 		    dataIndex: 'mac'
 		},
 		{
-		    header: 'Host ifname',
+		    header: gettext('Host ifname'),
 		    width: 110,
 		    dataIndex: 'host_ifname'
 		},
 		{
-		    header: 'Host MAC',
+		    header: gettext('Host MAC'),
 		    width: 110,
 		    dataIndex: 'host_mac'
 		}
diff --git a/www/manager/openvz/Options.js b/www/manager/openvz/Options.js
index 9cd3431..edd39ab 100644
--- a/www/manager/openvz/Options.js
+++ b/www/manager/openvz/Options.js
@@ -9,49 +9,49 @@ Ext.define('PVE.openvz.Options', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var rows = {
 	    onboot: {
-		header: 'Start at boot',
+		header: gettext('Start at boot'),
 		defaultValue: '',
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Start at boot',
+		    title: gettext('Start at boot'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'onboot',
 			uncheckedValue: 0,
 			defaultValue: 0,
-			fieldLabel: 'Start at boot'
+			fieldLabel: gettext('Start at boot')
 		    }
 		}
 	    },
 	    ostemplate: {
-		header: 'Template',
+		header: gettext('Template'),
 		defaultValue: 'no set'
 	    },
 	    storage: {
-		header: 'Storage',
+		header: gettext('Storage'),
 		defaultValue: 'no set'
 	    },
 	    cpuunits: {
-		header: 'CPU units',
+		header: gettext('CPU units'),
 		defaultValue: '1000',
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'CPU units',
+		    title: gettext('CPU units'),
 		    items: {
 			xtype: 'numberfield',
 			name: 'cpuunits',
-			fieldLabel: 'CPU units',
+			fieldLabel: gettext('CPU units'),
 			minValue: 8,
 			maxValue: 500000,
 			allowBlank: false
@@ -59,38 +59,38 @@ Ext.define('PVE.openvz.Options', {
 		}
 	    },
 	    quotaugidlimit: {
-		header: 'Quota UGID limit',
+		header: gettext('Quota UGID limit'),
 		defaultValue: '0',
 		renderer: function(value) {
 		    if (value == 0) {
-			return 'User quotas disabled.';
+			return gettext('User quotas disabled.');
 		    }
 		    return value;
 		},
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Quota UGID limit (0 to disable user quotas)',
+		    title: gettext('Quota UGID limit (0 to disable user quotas)'),
 		    items: {
 			xtype: 'numberfield',
 			name: 'quotaugidlimit',
-			fieldLabel: 'UGID limit',
+			fieldLabel: gettext('UGID limit'),
 			minValue: 0,
 			allowBlank: false
 		    }
 		}
 	    },
 	    quotatime: {
-		header: 'Quota Grace period',
+		header: gettext('Quota Grace period'),
 		defaultValue: '0',
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Quota Grace period (seconds)',
+		    title: gettext('Quota Grace period (seconds)'),
 		    items: {
 			xtype: 'numberfield',
 			name: 'quotatime',
 			minValue: 0,
 			allowBlank: false,
-			fieldLabel: 'Grace period'
+			fieldLabel: gettext('Grace period')
 		    }
 		}
 	    }
@@ -127,7 +127,7 @@ Ext.define('PVE.openvz.Options', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
diff --git a/www/manager/openvz/RessourceEdit.js b/www/manager/openvz/RessourceEdit.js
index 4be0151..d94842a 100644
--- a/www/manager/openvz/RessourceEdit.js
+++ b/www/manager/openvz/RessourceEdit.js
@@ -15,7 +15,7 @@ Ext.define('PVE.openvz.RessourceInputPanel', {
 		maxValue: 128*1024,
 		value: '512',
 		step: 32,
-		fieldLabel: 'Memory (MB)',
+		fieldLabel: gettext('Memory (MB)'),
 		allowBlank: false
 	    },
 	    {
@@ -25,7 +25,7 @@ Ext.define('PVE.openvz.RessourceInputPanel', {
 		maxValue: 128*1024,
 		value: '512',
 		step: 32,
-		fieldLabel: 'Swap (MB)',
+		fieldLabel: gettext('Swap (MB)'),
 		allowBlank: false
 	    }
 	];
@@ -37,7 +37,7 @@ Ext.define('PVE.openvz.RessourceInputPanel', {
 		minValue: 0.5,
 		value: '4',
 		step: 1,
-		fieldLabel: 'Disk space (GB)',
+		fieldLabel: gettext('Disk space (GB)'),
 		allowBlank: false
 	    },
 	    {
@@ -46,7 +46,7 @@ Ext.define('PVE.openvz.RessourceInputPanel', {
 		minValue: 1,
 		value: '1',
 		step: 1,
-		fieldLabel: 'CPUs',
+		fieldLabel: gettext('CPUs'),
 		allowBlank: false
 	    }
 	];
@@ -62,7 +62,7 @@ Ext.define('PVE.openvz.RessourceEdit', {
 	var me = this;
 	
 	Ext.apply(me, {
-	    title: "Edit ressource settings",
+	    title: gettext("Edit ressource settings"),
 	    items: Ext.create('PVE.openvz.RessourceInputPanel')
 	});
 
@@ -70,4 +70,4 @@ Ext.define('PVE.openvz.RessourceEdit', {
 
 	me.load();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/openvz/RessourceView.js b/www/manager/openvz/RessourceView.js
index 542d993..01bacb5 100644
--- a/www/manager/openvz/RessourceView.js
+++ b/www/manager/openvz/RessourceView.js
@@ -10,17 +10,17 @@ Ext.define('PVE.openvz.RessourceView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var rows = {
 	    memory: {
-		header: 'Memory',
+		header: gettext('Memory'),
 		editor: 'PVE.openvz.RessourceEdit',
 		never_delete: true,
 		renderer: function(value) {
@@ -28,7 +28,7 @@ Ext.define('PVE.openvz.RessourceView', {
 		}
 	    },
 	    swap: {
-		header: 'Swap',
+		header: gettext('Swap'),
 		editor: 'PVE.openvz.RessourceEdit',
 		never_delete: true,
 		renderer: function(value) {
@@ -36,13 +36,13 @@ Ext.define('PVE.openvz.RessourceView', {
 		}
 	    },
 	    cpus: {
-		header: 'Processors',
+		header: gettext('Processors'),
 		never_delete: true,
 		editor: 'PVE.openvz.RessourceEdit',
 		defaultValue: 1
 	    },
 	    disk: {
-		header: 'Disk space',
+		header: gettext('Disk space'),
 		editor: 'PVE.openvz.RessourceEdit',
 		never_delete: true,
 		renderer: function(value) {
@@ -82,7 +82,7 @@ Ext.define('PVE.openvz.RessourceView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
diff --git a/www/manager/openvz/StatusView.js b/www/manager/openvz/StatusView.js
index 4d2ab2a..1da0b08 100644
--- a/www/manager/openvz/StatusView.js
+++ b/www/manager/openvz/StatusView.js
@@ -6,12 +6,12 @@ Ext.define('PVE.openvz.StatusView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var render_cpu = function(value, metaData, record, rowIndex, colIndex, store) {
@@ -26,7 +26,7 @@ Ext.define('PVE.openvz.StatusView', {
 	    }
 
 	    var cpu = value * 100;
-	    return cpu.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
+	    return Ext.String.format(gettext('{0}% of {1} {2}'), cpu.toFixed(1), maxcpu.toString(), (maxcpu > 1 ? gettext('CPUs') : gettext('CPU')));
 
 	};
 
@@ -39,16 +39,16 @@ Ext.define('PVE.openvz.StatusView', {
 	    var used = value-swap;
 
 	    var per = (used / max)*100;
-	    var text = "<div>Total: " + PVE.Utils.format_size(max) + "</div>" + 
-		"<div>Used: " + PVE.Utils.format_size(used) + "</div>";
+	    var text = "<div>" + gettext("Total") + ": " + PVE.Utils.format_size(max) + "</div>" + 
+		"<div>" + gettext("Used") + ": " + PVE.Utils.format_size(used) + "</div>";
 	    return text;
 	};
 
 	var render_swap = function(value, metaData, record, rowIndex, colIndex, store) {
 	    var maxswap = me.getObjectValue('maxswap', 0);
 	    var per = (value / maxswap)*100;
-	    var text = "<div>Total: " + PVE.Utils.format_size(maxswap) + "</div>" + 
-		"<div>Used: " + PVE.Utils.format_size(value) + "</div>";
+	    var text = "<div>" + gettext("Total") + ": " + PVE.Utils.format_size(maxswap) + "</div>" + 
+		"<div>" + gettext("Used") + ": " + PVE.Utils.format_size(value) + "</div>";
 	    return text;
 	};
 
@@ -61,16 +61,16 @@ Ext.define('PVE.openvz.StatusView', {
 	};
 
 	var rows = {
-	    name: { header: 'Name', defaultValue: 'no name specified' },
-	    status: { header: 'Status', defaultValue: 'unknown', renderer: render_status },
+	    name: { header: gettext('Name'), defaultValue: 'no name specified' },
+	    status: { header: gettext('Status'), defaultValue: 'unknown', renderer: render_status },
 	    failcnt: { visible: false },
-	    cpu: { header: 'CPU usage', required: true,  renderer: render_cpu },
+	    cpu: { header: gettext('CPU usage'), required: true,  renderer: render_cpu },
 	    cpus: { visible: false },
-	    mem: { header: 'Memory usage', required: true,  renderer: render_mem },
+	    mem: { header: gettext('Memory usage'), required: true,  renderer: render_mem },
 	    maxmem: { visible: false },
-	    swap: { header: 'VSwap usage', required: true,  renderer: render_swap },
+	    swap: { header: gettext('VSwap usage'), required: true,  renderer: render_swap },
 	    maxswap: { visible: false },
-	    uptime: { header: 'Uptime', required: true, renderer: PVE.Utils.render_uptime }
+	    uptime: { header: gettext('Uptime'), required: true, renderer: PVE.Utils.render_uptime }
 	};
 
 	Ext.applyIf(me, {
diff --git a/www/manager/openvz/Summary.js b/www/manager/openvz/Summary.js
index 692e8a3..91af866 100644
--- a/www/manager/openvz/Summary.js
+++ b/www/manager/openvz/Summary.js
@@ -7,26 +7,26 @@ Ext.define('PVE.openvz.Summary', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	if (!me.workspace) {
-	    throw "no workspace specified";
+	    throw gettext("no workspace specified");
 	}
 
 	if (!me.statusStore) {
-	    throw "no status storage specified";
+	    throw gettext("no status storage specified");
 	}
 
 	var rstore = me.statusStore;
 
 	var statusview = Ext.create('PVE.openvz.StatusView', {
-	    title: 'Status',
+	    title: gettext('Status'),
 	    pveSelNode: me.pveSelNode,
 	    width: 400,
 	    rstore: rstore
@@ -64,28 +64,28 @@ Ext.define('PVE.openvz.Summary', {
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "CPU usage %",
+		    title: gettext("CPU usage %"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'cpu',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Memory usage",
+		    title: gettext("Memory usage"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'mem,maxmem',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Network traffic",
+		    title: gettext("Network traffic"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'netin,netout',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Disk IO",
+		    title: gettext("Disk IO"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'diskread,diskwrite',
 		    rrdurl: rrdurl
diff --git a/www/manager/panel/NotesView.js b/www/manager/panel/NotesView.js
index d7b3a16..05ce0cb 100644
--- a/www/manager/panel/NotesView.js
+++ b/www/manager/panel/NotesView.js
@@ -8,7 +8,7 @@ Ext.define('PVE.panel.NotesView', {
 	    url: me.url,
 	    waitMsgTarget: me,
 	    failure: function(response, opts) {
-		me.update("Error " + response.htmlStatus);
+		me.update(gettext("Error") + " " + response.htmlStatus);
 	    },
 	    success: function(response, opts) {
 		var data = response.result.data.description || '';
@@ -22,12 +22,12 @@ Ext.define('PVE.panel.NotesView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vmtype = me.pveSelNode.data.type;
@@ -38,11 +38,11 @@ Ext.define('PVE.panel.NotesView', {
 	} else if (vmtype === 'openvz') {
 	    me.url = '/api2/extjs/nodes/' + nodename + '/openvz/' + vmid + '/config';
 	} else {
-	    throw "unknown vm type '" + vmtype + "'";
+	    throw Ext.String.format(gettext("unknown vm type {0}"), "'" + vmtype + "'");
 	}
 
 	Ext.apply(me, {
-	    title: "Notes",
+	    title: gettext("Notes"),
 	    style: 'padding-left:10px',
 	    bodyStyle: 'white-space:pre',
 	    bodyPadding: 10,
diff --git a/www/manager/panel/RRDView.js b/www/manager/panel/RRDView.js
index 486a195..90ea80d 100644
--- a/www/manager/panel/RRDView.js
+++ b/www/manager/panel/RRDView.js
@@ -14,11 +14,11 @@ Ext.define('PVE.panel.RRDView', {
 	}
 
 	if (!me.datasource) {
-	    throw "no datasource specified";
+	    throw gettext("no datasource specified");
 	}
 
 	if (!me.rrdurl) {
-	    throw "no rrdurl specified";
+	    throw gettext("no rrdurl specified");
 	}
 
 	var datasource = me.datasource;
diff --git a/www/manager/panel/StatusPanel.js b/www/manager/panel/StatusPanel.js
index ed0d4f3..735741f 100644
--- a/www/manager/panel/StatusPanel.js
+++ b/www/manager/panel/StatusPanel.js
@@ -8,7 +8,7 @@ Ext.define('PVE.panel.StatusPanel', {
     alias: 'widget.pveStatusPanel',
 
     
-    //title: "Logs",
+    //title: gettext("Logs"),
     //tabPosition: 'bottom',
 
     initComponent: function() {
diff --git a/www/manager/qemu/BootOrderEdit.js b/www/manager/qemu/BootOrderEdit.js
index 2308ce4..41fead9 100644
--- a/www/manager/qemu/BootOrderEdit.js
+++ b/www/manager/qemu/BootOrderEdit.js
@@ -111,7 +111,7 @@ Ext.define('PVE.qemu.BootOrderPanel', {
 	var me = this;
 
 	me.kv1 = Ext.create('PVE.form.KVComboBox', {
-	    fieldLabel: 'First boot device',
+	    fieldLabel: gettext('First boot device'),
 	    labelWidth: 120,
 	    name: 'bd1',
 	    allowBlank: false,
@@ -119,7 +119,7 @@ Ext.define('PVE.qemu.BootOrderPanel', {
 	});
 
 	me.kv2 = Ext.create('PVE.form.KVComboBox', {
-	    fieldLabel: 'Second boot device',
+	    fieldLabel: gettext('Second boot device'),
 	    labelWidth: 120,
 	    name: 'bd2',
 	    allowBlank: false,
@@ -127,7 +127,7 @@ Ext.define('PVE.qemu.BootOrderPanel', {
 	});
 
 	me.kv3 = Ext.create('PVE.form.KVComboBox', {
-	    fieldLabel: 'Third boot device',
+	    fieldLabel: gettext('Third boot device'),
 	    labelWidth: 120,
 	    name: 'bd3',
 	    allowBlank: false,
@@ -183,7 +183,7 @@ Ext.define('PVE.qemu.BootOrderEdit', {
 
 	me.callParent();
 	
-	me.title = 'Boot order';
+	me.title = gettext('Boot order');
 
 	me.load({
 	    success: function(response, options) {
diff --git a/www/manager/qemu/CDEdit.js b/www/manager/qemu/CDEdit.js
index 3db838d..f95b46b 100644
--- a/www/manager/qemu/CDEdit.js
+++ b/www/manager/qemu/CDEdit.js
@@ -82,7 +82,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
 	    xtype: 'radiofield',
 	    name: 'mediaType',
 	    inputValue: 'iso',
-	    boxLabel: 'Use CD/DVD disc image file (iso)',
+	    boxLabel: gettext('Use CD/DVD disc image file (iso)'),
 	    checked: true,
 	    listeners: {
 		change: function(f, value) {
@@ -100,7 +100,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
 	    name: 'cdimage',
 	    nodename: me.nodename,
 	    storageContent: 'iso',
-	    fieldLabel: 'ISO Image',
+	    fieldLabel: gettext('ISO Image'),
 	    labelAlign: 'right',
 	    allowBlank: false
 	});
@@ -108,7 +108,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
 	me.cdstoragesel = Ext.create('PVE.form.StorageSelector', {
 	    name: 'cdstorage',
 	    nodename: me.nodename,
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    labelAlign: 'right',
 	    storageContent: 'iso',
 	    allowBlank: false,
@@ -127,14 +127,14 @@ Ext.define('PVE.qemu.CDInputPanel', {
 	    xtype: 'radiofield',
 	    name: 'mediaType',
 	    inputValue: 'cdrom',
-	    boxLabel: 'Use physical CD/DVD Drive'
+	    boxLabel: gettext('Use physical CD/DVD Drive')
 	});
 
 	items.push({
 	    xtype: 'radiofield',
 	    name: 'mediaType',
 	    inputValue: 'none',
-	    boxLabel: 'Do not use any media'
+	    boxLabel: gettext('Do not use any media')
 	});
 
 	if (me.insideWizard) {
@@ -155,7 +155,7 @@ Ext.define('PVE.qemu.CDEdit', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) { 
-	    throw "no node name specified";	    
+	    throw gettext("no node name specified");	    
 	}
 
 	me.create = me.confid ? false : true;
@@ -166,8 +166,8 @@ Ext.define('PVE.qemu.CDEdit', {
 	});
 
 	Ext.applyIf(me, {
-	    title: me.create ? 'Add CD/DVD Drive' : 
-		'Change CD/DVD settings (' + me.confid + ')',
+	    title: me.create ? gettext('Add CD/DVD Drive') : 
+		Ext.String.format(gettext('Change CD/DVD settings ({0})'), me.confid),
 	    items: [ ipanel ]
 	});
 
@@ -180,7 +180,7 @@ Ext.define('PVE.qemu.CDEdit', {
 		    var value = response.result.data[me.confid];
 		    var drive = PVE.Parser.parseQemuDrive(me.confid, value);
 		    if (!drive) {
-			Ext.Msg.alert('Error', 'Unable to parse drive options');
+			Ext.Msg.alert(gettext('Error'), gettext('Unable to parse drive options'));
 			me.close();
 			return;
 		    }
diff --git a/www/manager/qemu/CmdMenu.js b/www/manager/qemu/CmdMenu.js
index a252bce..33e0591 100644
--- a/www/manager/qemu/CmdMenu.js
+++ b/www/manager/qemu/CmdMenu.js
@@ -6,12 +6,12 @@ Ext.define('PVE.qemu.CmdMenu', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var vmname = me.pveSelNode.data.name;
@@ -22,7 +22,7 @@ Ext.define('PVE.qemu.CmdMenu', {
 		url: '/nodes/' + nodename + '/qemu/' + vmid + "/status/" + cmd,
 		method: 'POST',
 		failure: function(response, opts) {
-		    Ext.Msg.alert('Error', response.htmlStatus);
+		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		}
 	    });
 	};
diff --git a/www/manager/qemu/Config.js b/www/manager/qemu/Config.js
index e3f8c0c..7a25514 100644
--- a/www/manager/qemu/Config.js
+++ b/www/manager/qemu/Config.js
@@ -7,12 +7,12 @@ Ext.define('PVE.qemu.Config', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	me.statusStore = Ext.create('PVE.data.ObjectStore', {
@@ -84,7 +84,7 @@ Ext.define('PVE.qemu.Config', {
 		    method: 'DELETE',
 		    waitMsgTarget: me,
 		    failure: function(response, opts) {
-			Ext.Msg.alert('Error', response.htmlStatus);
+			Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		    }
 		});
 	    } 
@@ -104,7 +104,7 @@ Ext.define('PVE.qemu.Config', {
 	Ext.apply(me, {
 	    title: Ext.String.format(gettext("Virtual machine {0} on node {1}"), descr, "'" + nodename + "'"),
 	    hstateid: 'kvmtab',
-	    tbar: [ startBtn, shutdownBtn, stopBtn, resetBtn, 
+	    tbar: [ startBtn, shutdownBtn, stopBtn, resetBtn,
 		    removeBtn, migrateBtn, consoleBtn ],
 	    defaults: { statusStore: me.statusStore },
 	    items: [
diff --git a/www/manager/qemu/CreateWizard.js b/www/manager/qemu/CreateWizard.js
index 8d937ff..1e57c88 100644
--- a/www/manager/qemu/CreateWizard.js
+++ b/www/manager/qemu/CreateWizard.js
@@ -23,33 +23,33 @@ Ext.define('PVE.qemu.CreateWizard', {
 	});
 
 	var cdpanel = Ext.create('PVE.qemu.CDInputPanel', {
-	    title: 'Installation Media',
+	    title: gettext('Installation Media'),
 	    confid: 'ide2',
 	    insideWizard: true
 	});
 
 	var hdpanel = Ext.create('PVE.qemu.HDInputPanel', {
-	    title: 'Harddisk',
+	    title: gettext('Harddisk'),
 	    create: true,
 	    insideWizard: true
 	});
 
 	var networkpanel =  Ext.create('PVE.qemu.NetworkInputPanel', {
-	    title: 'Network',
+	    title: gettext('Network'),
 	    insideWizard: true
 	});
 
 	Ext.applyIf(me, {
-	    title: 'Create new virtual machine',
+	    title: gettext('Create new virtual machine'),
 	    items: [
 		{
 		    xtype: 'inputpanel',
-		    title: 'General',
+		    title: gettext('General'),
 		    column1: [
 			{
 			    xtype: 'PVE.form.NodeSelector',
 			    name: 'nodename',
-			    fieldLabel: 'Node',
+			    fieldLabel: gettext('Node'),
 			    allowBlank: false,
 			    onlineValidator: true,
 			    listeners: {
@@ -70,7 +70,7 @@ Ext.define('PVE.qemu.CreateWizard', {
 			    xtype: 'textfield',
 			    name: 'name',
 			    value: '',
-			    fieldLabel: 'VM name',
+			    fieldLabel: gettext('VM name'),
 			    allowBlank: true
 			}
 		    ],
@@ -82,32 +82,32 @@ Ext.define('PVE.qemu.CreateWizard', {
 		    }
 		},
 		{
-		    title: 'OS Type',
+		    title: gettext('OS Type'),
 		    xtype: 'PVE.qemu.OSTypeInputPanel'
 		},
 		cdpanel,
 		hdpanel,
 		{
 		    xtype: 'PVE.qemu.ProcessorInputPanel',
-		    title: 'CPU'
+		    title: gettext('CPU')
 		},
 		{
 		    xtype: 'PVE.qemu.MemoryInputPanel',
 		    insideWizard: true,
-		    title: 'Memory'
+		    title: gettext('Memory')
 		},
 		networkpanel,
 		{
-		    title: 'Confirm',
+		    title: gettext('Confirm'),
 		    layout: 'fit',
 		    items: [
 			{
-			    title: 'Settings',
+			    title: gettext('Settings'),
 			    xtype: 'grid',
 			    store: summarystore,
 			    columns: [
-				{header: 'Key', width: 150, dataIndex: 'key'},
-				{header: 'Value', flex: 1, dataIndex: 'value'}
+				{header: gettext('Key'), width: 150, dataIndex: 'key'},
+				{header: gettext('Value'), flex: 1, dataIndex: 'value'}
 			    ]
 			}
 		    ],
diff --git a/www/manager/qemu/DisplayEdit.js b/www/manager/qemu/DisplayEdit.js
index 0cabd87..3b55912 100644
--- a/www/manager/qemu/DisplayEdit.js
+++ b/www/manager/qemu/DisplayEdit.js
@@ -5,13 +5,14 @@ Ext.define('PVE.qemu.DisplayEdit', {
 	var me = this;
 
 	Ext.apply(me, {
-	    title: "Edit display settings",
+	    title: gettext("Edit display settings"),
 	    width: 350,
 	    items: {
 		xtype: 'DisplaySelector',
 		name: 'vga',
 		value: '',
-		fieldLabel: 'Graphic card'
+		fieldLabel: gettext('Graphic card'),
+		labelWidth: 180
 	    }
 	});
 
diff --git a/www/manager/qemu/HDEdit.js b/www/manager/qemu/HDEdit.js
index d3f93ce..1afdb09 100644
--- a/www/manager/qemu/HDEdit.js
+++ b/www/manager/qemu/HDEdit.js
@@ -104,7 +104,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
 	if (me.unused) {
 	    me.unusedDisks = Ext.create('PVE.form.KVComboBox', {
 		name: 'unusedId',	
-		fieldLabel: 'Disk image',
+		fieldLabel: gettext('Disk image'),
 		matchFieldWidth: false,
 		listConfig: {
 		    width: 350
@@ -117,7 +117,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
 	    me.hdstoragesel = Ext.create('PVE.form.StorageSelector', {
 		name: 'hdstorage',
 		nodename: me.nodename,
-		fieldLabel: 'Storage',
+		fieldLabel: gettext('Storage'),
 		storageContent: 'images',
 		autoSelect: me.insideWizard,
 		allowBlank: false
@@ -130,14 +130,14 @@ Ext.define('PVE.qemu.HDInputPanel', {
 		minValue: 1,
 		maxValue: 128*1024,
 		value: '32',
-		fieldLabel: 'Disk size (GB)',
+		fieldLabel: gettext('Disk size (GB)'),
 		allowBlank: false
 	    });
 	} else {
 	    me.column1.push({
 		xtype: 'displayfield',
-                fieldLabel: 'Image',
-		labelWidth: 50,
+                fieldLabel: gettext('Image'),
+		labelWidth: 60,
                 name: 'hdimage'
 	    });
 	}
@@ -146,7 +146,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
 	    me.column2.push({
 		xtype: 'PVE.form.DiskFormatSelector',
 		name: 'diskformat',
-		fieldLabel: 'Image format',
+		fieldLabel: gettext('Image format'),
 		value: 'raw',
 		allowBlank: false
 	    });
@@ -156,13 +156,13 @@ Ext.define('PVE.qemu.HDInputPanel', {
 	    xtype: 'CacheTypeSelector',
 	    name: 'cache',
 	    value: '',
-	    fieldLabel: 'Cache'
+	    fieldLabel: gettext('Cache')
 	});
 
 	if (!me.insideWizard) {
 	    me.column2.push({
 		xtype: 'pvecheckbox',
-		fieldLabel: 'No backup',
+		fieldLabel: gettext('No backup'),
 		name: 'nobackup'
 	    });
 	}
@@ -179,7 +179,7 @@ Ext.define('PVE.qemu.HDEdit', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) { 
-	    throw "no node name specified";	    
+	    throw gettext("no node name specified");	    
 	}
 
 	var unused = me.confid && me.confid.match(/^unused\d+$/);
@@ -195,11 +195,11 @@ Ext.define('PVE.qemu.HDEdit', {
 
 	var title;
 	if (unused) {
-	    me.title = 'Add (previously unused) Harddisk';
+	    me.title = gettext('Add (previously unused) Harddisk');
 	} else if (me.create) {
-            me.title = 'Add Harddisk';
+            me.title = gettext('Add Harddisk');
 	} else {
-	    me.title = 'Edit Harddisk settings (' + me.confid + ')';
+	    me.title = Ext.String.format(gettext('Edit Harddisk settings ({0})'), me.confid);
 	}
 
 	me.items = [ ipanel ];
@@ -213,7 +213,7 @@ Ext.define('PVE.qemu.HDEdit', {
 		    var value = response.result.data[me.confid];
 		    var drive = PVE.Parser.parseQemuDrive(me.confid, value);
 		    if (!drive) {
-			Ext.Msg.alert('Error', 'Unable to parse drive options');
+			Ext.Msg.alert(gettext('Error'), gettext('Unable to parse drive options'));
 			me.close();
 			return;
 		    }
diff --git a/www/manager/qemu/HardwareView.js b/www/manager/qemu/HardwareView.js
index 74f17ab..4caff03 100644
--- a/www/manager/qemu/HardwareView.js
+++ b/www/manager/qemu/HardwareView.js
@@ -14,7 +14,7 @@ Ext.define('PVE.qemu.HardwareView', {
 	    if (rowdef.tdCls == 'pve-itype-icon-storage') { 
 		if (record.data.value.match(/media=cdrom/)) {
 		    metaData.tdCls = 'pve-itype-icon-cdrom';
-		    return rowdef.header.replace(/Hard Disk/, 'CD/DVD');
+		    return rowdef.header.replace(gettext('Hard Disk'), gettext('CD/DVD'));
 		}
 	    }
 	}
@@ -27,17 +27,17 @@ Ext.define('PVE.qemu.HardwareView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var rows = {
 	    memory: {
-		header: 'Memory',
+		header: gettext('Memory'),
 		editor: 'PVE.qemu.MemoryEdit',
 		never_delete: true,
 		tdCls: 'pve-itype-icon-memory',
@@ -46,7 +46,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		}
 	    },
 	    sockets: {
-		header: 'Processors',
+		header: gettext('Processors'),
 		never_delete: true,
 		editor: 'PVE.qemu.ProcessorEdit',
 		tdCls: 'pve-itype-icon-processor',
@@ -58,7 +58,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		    if (!cores || (cores <= 1)) {
 			res = value;
 		    } else {
-			res = (value*cores) + ' (' + value + ' sockets, ' + cores + ' cores)';
+			res = Ext.String.format(gettext('{0} ({1} sockets, {2} cores)'), (value*cores), value, cores);
 		    }
 		    if (model) {
 			res += ' [' + model + ']';
@@ -67,7 +67,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		}
 	    },
 	    keyboard: {
-		header: 'Keyboard',
+		header: gettext('Keyboard'),
 		never_delete: true,
 		editor: 'PVE.qemu.KeyboardEdit',
 		tdCls: 'pve-itype-icon-keyboard',
@@ -75,7 +75,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		renderer: PVE.Utils.render_kvm_language
 	    },
 	    vga: {
-		header: 'Display',
+		header: gettext('Display'),
 		editor: 'PVE.qemu.DisplayEdit',
 		never_delete: true,
 		tdCls: 'pve-itype-icon-display',
@@ -96,7 +96,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 1,
 		tdCls: 'pve-itype-icon-storage',
 		editor: 'PVE.qemu.HDEdit',
-		header: 'Hard Disk ' + '(' + confid +')'
+		header: gettext('Hard Disk') + ' ' + '(' + confid +')'
 	    };
 	}
 	for (i = 0; i < 16; i++) {
@@ -105,7 +105,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 1,
 		tdCls: 'pve-itype-icon-storage',
 		editor: 'PVE.qemu.HDEdit',
-		header: 'Hard Disk ' + '(' + confid +')'
+		header: gettext('Hard Disk') + ' ' + '(' + confid +')'
 	    };
 	}
 	for (i = 0; i < 16; i++) {
@@ -114,7 +114,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 1,
 		tdCls: 'pve-itype-icon-storage',
 		editor: 'PVE.qemu.HDEdit',
-		header: 'Hard Disk ' + '(' + confid +')'
+		header: gettext('Hard Disk') + ' ' + '(' + confid +')'
 	    };
 	}
 	for (i = 0; i < 32; i++) {
@@ -123,7 +123,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 2,
 		tdCls: 'pve-itype-icon-network',
 		editor: 'PVE.qemu.NetworkEdit',
-		header: 'Network Adapter '+ '(' + confid +')'
+		header: gettext('Network Adapter') + ' '+ '(' + confid +')'
 	    };
 	}
 	for (i = 0; i < 8; i++) {
@@ -131,7 +131,7 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 3,
 		tdCls: 'pve-itype-icon-storage',
 		editor: 'PVE.qemu.HDEdit',
-		header: 'Unused Disk'
+		header: gettext('Unused Disk')
 	    };
 	}
 
@@ -181,13 +181,13 @@ Ext.define('PVE.qemu.HardwareView', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
 
 	var remove_btn = new Ext.Button({
-	    text: 'Remove',
+	    text: gettext('Remove'),
 	    disabled: true,
 	    handler: function(){
 		var sm = me.getSelectionModel();
@@ -197,15 +197,12 @@ Ext.define('PVE.qemu.HardwareView', {
 		    return;
 		}
 
-		var msg = 'Are you sure you want to remove: ' + 
-		    me.renderKey(rec.data.key, {}, rec);
+		var msg = Ext.String.format(gettext('Are you sure you want to remove: {0}'), me.renderKey(rec.data.key, {}, rec));
 		if (rec.data.key.match(/^unused\d+$/)) {
-		    msg = 'Are you sure you want to remove image "' +
-			rec.data.value + '"? This will permanently erase ' +
-			'all image data.';
+		    msg = Ext.String.format(gettext('Are you sure you want to remove image {0}? This will permanently erase all image data.'), '"' + rec.data.value + '"');
 		}
 
-		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		Ext.Msg.confirm(gettext('Deletion Confirmation'), msg, function(btn) {
 		    if (btn !== 'yes') {
 			return;
 		    }
@@ -220,7 +217,7 @@ Ext.define('PVE.qemu.HardwareView', {
 			    reload();
 			},
 			failure: function (response, opts) {
-			    Ext.Msg.alert('Error',response.htmlStatus);
+			    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 			}
 		    });
 		});
@@ -246,14 +243,14 @@ Ext.define('PVE.qemu.HardwareView', {
 
 	Ext.applyIf(me, {
 	    url: '/api2/json/' + baseurl,
-	    cwidth1: 170,
+	    cwidth1: 210,
 	    tbar: [ 
 		{
-		    text: 'Add',
+		    text: gettext('Add'),
 		    menu: new Ext.menu.Menu({
 			items: [
 			    {
-				text: 'Hard Disk',
+				text: gettext('Hard Disk'),
 				iconCls: 'pve-itype-icon-storage',
 				handler: function() {
 				    var win = Ext.create('PVE.qemu.HDEdit', {
@@ -265,7 +262,7 @@ Ext.define('PVE.qemu.HardwareView', {
 				}
 			    },
 			    {
-				text: 'CD/DVD Drive',
+				text: gettext('CD/DVD Drive'),
 				iconCls: 'pve-itype-icon-cdrom',
 				handler: function() {
 				    var win = Ext.create('PVE.qemu.CDEdit', {
@@ -277,7 +274,7 @@ Ext.define('PVE.qemu.HardwareView', {
 				}
 			    },
 			    {
-				text: 'Network Device',
+				text: gettext('Network Device'),
 				iconCls: 'pve-itype-icon-network',
 				handler: function() {
 				    var win = Ext.create('PVE.qemu.NetworkEdit', {
diff --git a/www/manager/qemu/KeyboardEdit.js b/www/manager/qemu/KeyboardEdit.js
index 2a37513..2a866db 100644
--- a/www/manager/qemu/KeyboardEdit.js
+++ b/www/manager/qemu/KeyboardEdit.js
@@ -5,12 +5,12 @@ Ext.define('PVE.qemu.KeyboardEdit', {
 	var me = this;
 
 	Ext.applyIf(me, {
-	    title: "Edit keyboard settings",
+	    title: gettext("Edit keyboard settings"),
 	    items: {
 		xtype: 'VNCKeyboardSelector',
 		name: 'keyboard',
 		value: '',
-		fieldLabel: 'Keyboard Layout'
+		fieldLabel: gettext('Keyboard Layout')
 	    }
 	});
 
diff --git a/www/manager/qemu/MemoryEdit.js b/www/manager/qemu/MemoryEdit.js
index a54a218..4621432 100644
--- a/www/manager/qemu/MemoryEdit.js
+++ b/www/manager/qemu/MemoryEdit.js
@@ -14,7 +14,7 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
 	    maxValue: 128*1024,
 	    value: '512',
 	    step: 32,
-	    fieldLabel: 'Memory (MB)',
+	    fieldLabel: gettext('Memory (MB)'),
 	    allowBlank: false
 	};
 
@@ -35,7 +35,7 @@ Ext.define('PVE.qemu.MemoryEdit', {
 	var me = this;
 	
 	Ext.apply(me, {
-	    title: "Edit memory settings",
+	    title: gettext("Edit memory settings"),
 	    items: Ext.create('PVE.qemu.MemoryInputPanel')
 	});
 
@@ -43,4 +43,4 @@ Ext.define('PVE.qemu.MemoryEdit', {
 
 	me.load();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/qemu/Monitor.js b/www/manager/qemu/Monitor.js
index cd8e6ec..966ea54 100644
--- a/www/manager/qemu/Monitor.js
+++ b/www/manager/qemu/Monitor.js
@@ -10,12 +10,12 @@ Ext.define('PVE.qemu.Monitor', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var lines = [];
@@ -92,7 +92,7 @@ Ext.define('PVE.qemu.Monitor', {
 		    listeners: {
 			afterrender: function(f) {
 			    f.focus(false);
-			    addLine("Type 'help' for help.");
+			    addLine(gettext("Type 'help' for help."));
 			    refresh();
 			},
 			specialkey: function(f, e) {
diff --git a/www/manager/qemu/NetworkEdit.js b/www/manager/qemu/NetworkEdit.js
index 1f52dd9..382064a 100644
--- a/www/manager/qemu/NetworkEdit.js
+++ b/www/manager/qemu/NetworkEdit.js
@@ -60,7 +60,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 
 	me.bridgesel = Ext.create('PVE.form.BridgeSelector', {
 	    name: 'bridge',
-	    fieldLabel: 'Bridge',
+	    fieldLabel: gettext('Bridge'),
 	    nodename: me.nodename,
 	    labelAlign: 'right',
 	    autoSelect: true,
@@ -73,7 +73,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 		name: 'networkmode',
 		height: 22, // hack: set same height as text fields
 		inputValue: 'bridge',
-		boxLabel: 'Bridged mode',
+		boxLabel: gettext('Bridged mode'),
 		checked: true,
 		listeners: {
 		    change: function(f, value) {
@@ -91,7 +91,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 		name: 'networkmode',
 		height: 22, // hack: set same height as text fields
 		inputValue: 'nat',
-		boxLabel: 'NAT mode'
+		boxLabel: gettext('NAT mode')
 	    }
 	];
 
@@ -101,7 +101,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 		name: 'networkmode',
 		height: 22, // hack: set same height as text fields
 		inputValue: 'none',
-		boxLabel: 'No network device'
+		boxLabel: gettext('No network device')
 	    });
 	}
 
@@ -109,14 +109,14 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 	    {
 		xtype: 'PVE.form.NetworkCardSelector',
 		name: 'model',
-		fieldLabel: 'Network card',
+		fieldLabel: gettext('Network card'),
 		value: 'rtl8139',
 		allowBlank: false
 	    },
 	    {
 		xtype: 'textfield',
 		name: 'macaddr',
-		fieldLabel: 'MAC address',
+		fieldLabel: gettext('MAC address'),
 		vtype: 'MacAddress',
 		allowBlank: true,
 		emptyText: 'auto'
@@ -124,7 +124,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 	    {
 		xtype: 'numberfield',
 		name: 'rate',
-		fieldLabel: 'Rate limit (MB/s)',
+		fieldLabel: gettext('Rate limit (MB/s)'),
 		minValue: 0,
 		maxValue: 10*1024,
 		value: '',
@@ -147,7 +147,7 @@ Ext.define('PVE.qemu.NetworkEdit', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) { 
-	    throw "no node name specified";	    
+	    throw gettext("no node name specified");	    
 	}
 
 	me.create = me.confid ? false : true;
@@ -158,8 +158,8 @@ Ext.define('PVE.qemu.NetworkEdit', {
 	});
 
 	Ext.applyIf(me, {
-	    title: me.create ? "Add network device" : 
-		"Edit network device settings",
+	    title: me.create ? gettext("Add network device") : 
+		gettext("Edit network device settings"),
 	    items: ipanel
 	});
 
@@ -173,7 +173,7 @@ Ext.define('PVE.qemu.NetworkEdit', {
 		    var value = me.vmconfig[me.confid];
 		    var network = PVE.Parser.parseQemuNetwork(me.confid, value);
 		    if (!network) {
-			Ext.Msg.alert('Error', 'Unable to parse network options');
+			Ext.Msg.alert(gettext('Error'), gettext('Unable to parse network options'));
 			me.close();
 			return;
 		    }
diff --git a/www/manager/qemu/OSTypeEdit.js b/www/manager/qemu/OSTypeEdit.js
index ce5ea0f..9b9737b 100644
--- a/www/manager/qemu/OSTypeEdit.js
+++ b/www/manager/qemu/OSTypeEdit.js
@@ -8,7 +8,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
 	me.column1 = [
 	    {
 		xtype: 'component', 
-		html: 'Microsoft Windows', 
+		html: gettext('Microsoft Windows'), 
 		cls:'x-form-check-group-label'
 	    },
 	    {
@@ -36,7 +36,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
 	me.column2 = [
 	    {
 		xtype: 'component', 
-		html: 'Linux/Other', 
+		html: gettext('Linux/Other'), 
 		cls:'x-form-check-group-label'
 	    },
 	    {
@@ -85,7 +85,7 @@ Ext.define('PVE.qemu.OSTypeEdit', {
 	var me = this;
 	
 	Ext.apply(me, {
-	    title: 'OS Type',
+	    title: gettext('OS Type'),
 	    items: Ext.create('PVE.qemu.OSTypeInputPanel')
 	});
 
diff --git a/www/manager/qemu/Options.js b/www/manager/qemu/Options.js
index dc7b36e..ff097a1 100644
--- a/www/manager/qemu/Options.js
+++ b/www/manager/qemu/Options.js
@@ -9,50 +9,50 @@ Ext.define('PVE.qemu.Options', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var rows = {
 	    name: {
 		required: true,
 		defaultValue: me.pveSelNode.data.name,
-		header: 'Name',
+		header: gettext('Name'),
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'VM name',
+		    title: gettext('VM name'),
 		    items: {
 			xtype: 'textfield',
 			name: 'name',
 			value: '',
-			fieldLabel: 'VM name',
+			fieldLabel: gettext('VM name'),
 			allowBlank: true
 		    }
 		}
 	    },
 	    onboot: {
-		header: 'Start at boot',
+		header: gettext('Start at boot'),
 		defaultValue: '',
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Start at boot',
+		    title: gettext('Start at boot'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'onboot',
 			uncheckedValue: 0,
 			defaultValue: 0,
 			deleteDefaultValue: true,
-			fieldLabel: 'Start at boot'
+			fieldLabel: gettext('Start at boot')
 		    }
 		}
 	    },
 	    ostype: {
-		header: 'OS Type',
+		header: gettext('OS Type'),
 		editor: 'PVE.qemu.OSTypeEdit',
 		renderer: PVE.Utils.render_kvm_ostype,
 		defaultValue: 'other'
@@ -61,7 +61,7 @@ Ext.define('PVE.qemu.Options', {
 		visible: false
 	    },
 	    boot: {
-		header: 'Boot order',
+		header: gettext('Boot order'),
 		defaultValue: 'cdn',
 		editor: 'PVE.qemu.BootOrderEdit',
 		renderer: function(order) {
@@ -76,16 +76,16 @@ Ext.define('PVE.qemu.Options', {
 			}
 			if (sel === 'c') {
 			    if (bootdisk) {
-				text += "Disk '" + bootdisk + "'";
+				text += gettext("Disk") + " '" + bootdisk + "'";
 			    } else {
-				text += "Disk";
+				text += gettext("Disk");
 			    }
 			} else if (sel === 'n') {
-			    text += 'Network';
+			    text += gettext('Network');
 			} else if (sel === 'a') {
-			    text += 'Floppy';
+			    text += gettext('Floppy');
 			} else if (sel === 'd') {
-			    text += 'CD-ROM';
+			    text += gettext('CD-ROM');
 			} else {
 			    text += sel;
 			}
@@ -94,12 +94,12 @@ Ext.define('PVE.qemu.Options', {
 		}
 	    },
 	    acpi: {
-		header: 'ACPI support',
+		header: gettext('ACPI support'),
 		defaultValue: true,
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'ACPI support',
+		    title: gettext('ACPI support'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'acpi',
@@ -107,17 +107,17 @@ Ext.define('PVE.qemu.Options', {
 			uncheckedValue: 0,
 			defaultValue: 1,
 			deleteDefaultValue: true,
-			fieldLabel: 'Enable'
+			fieldLabel: gettext('Enable')
 		    }
 		}
 	    },
 	    kvm: {
-		header: 'KVM hardware virtualization',
+		header: gettext('KVM hardware virtualization'),
 		defaultValue: true,
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'KVM hardware virtualization',
+		    title: gettext('KVM hardware virtualization'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'kvm',
@@ -125,59 +125,59 @@ Ext.define('PVE.qemu.Options', {
 			uncheckedValue: 0,
 			defaultValue: 1,
 			deleteDefaultValue: true,
-			fieldLabel: 'Enable'
+			fieldLabel: gettext('Enable')
 		    }
 		}
 	    },
 	    freeze: {
-		header: 'Freeze CPU at startup',
+		header: gettext('Freeze CPU at startup'),
 		defaultValue: false,
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Freeze CPU at startup',
+		    title: gettext('Freeze CPU at startup'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'freeze',
 			uncheckedValue: 0,
 			defaultValue: 0,
 			deleteDefaultValue: true,
-			labelWidth: 140,
-			fieldLabel: 'Freeze CPU at startup'
+			labelWidth: 200,
+			fieldLabel: gettext('Freeze CPU at startup')
 		    }
 		}
 	    },
 	    localtime: {
-		header: 'Use local time for RTC',
+		header: gettext('Use local time for RTC'),
 		defaultValue: false,
 		renderer: PVE.Utils.format_boolean,
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'Use local time for RTC',
+		    title: gettext('Use local time for RTC'),
 		    items: {
 			xtype: 'pvecheckbox',
 			name: 'localtime',
 			uncheckedValue: 0,
 			defaultValue: 0,
 			deleteDefaultValue: true,
-			labelWidth: 140,
-			fieldLabel: 'Use local time for RTC'
+			labelWidth: 200,
+			fieldLabel: gettext('Use local time for RTC')
 		    }
 		}
 
 	    },
 	    startdate: {
-		header: 'RTC start date',
+		header: gettext('RTC start date'),
 		defaultValue: 'now',
 		editor: {
 		    xtype: 'pveWindowEdit',
-		    title: 'RTC start date',
+		    title: gettext('RTC start date'),
 		    items: {
 			xtype: 'pvetextfield',
 			name: 'startdate',
 			deleteEmpty: true,
 			value: 'now',
-			fieldLabel: 'RTC start date',
+			fieldLabel: gettext('RTC start date'),
 			vtype: 'QemuStartDate',
 			allowBlank: true
 		    }
@@ -225,7 +225,7 @@ Ext.define('PVE.qemu.Options', {
 	};
 
 	var edit_btn = new Ext.Button({
-	    text: 'Edit',
+	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: run_editor
 	});
@@ -244,7 +244,7 @@ Ext.define('PVE.qemu.Options', {
 
 	Ext.applyIf(me, {
 	    url: "/api2/json/nodes/" + nodename + "/qemu/" + vmid + "/config",
-	    cwidth1: 150,
+	    cwidth1: 200,
 	    tbar: [ edit_btn ],
 	    rows: rows,
 	    listeners: {
diff --git a/www/manager/qemu/ProcessorEdit.js b/www/manager/qemu/ProcessorEdit.js
index 19002d2..2af9114 100644
--- a/www/manager/qemu/ProcessorEdit.js
+++ b/www/manager/qemu/ProcessorEdit.js
@@ -12,7 +12,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 		minValue: 1,
 		maxValue: 4,
 		value: '1',
-		fieldLabel: 'Sockets',
+		fieldLabel: gettext('Sockets'),
 		allowBlank: false,
 		listeners: {
 		    change: function(f, value) {
@@ -28,7 +28,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 		minValue: 1,
 		maxValue: 32,
 		value: '1',
-		fieldLabel: 'Cores',
+		fieldLabel: gettext('Cores'),
 		allowBlank: false,
 		listeners: {
 		    change: function(f, value) {
@@ -46,11 +46,11 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 		xtype: 'CPUModelSelector',
 		name: 'cpu',
 		value: '',
-		fieldLabel: 'CPU type'
+		fieldLabel: gettext('CPU type')
 	    },
 	    {
 		xtype: 'displayfield',
-		fieldLabel: 'Total cores',
+		fieldLabel: gettext('Total cores'),
 		name: 'totalcores',
 		value: '1'
 	    }
@@ -68,7 +68,7 @@ Ext.define('PVE.qemu.ProcessorEdit', {
 	var me = this;
 	
 	Ext.apply(me, {
-	    title: "Edit processor settings",
+	    title: gettext("Edit processor settings"),
 	    items: Ext.create('PVE.qemu.ProcessorInputPanel')
 	});
 
@@ -76,4 +76,4 @@ Ext.define('PVE.qemu.ProcessorEdit', {
 
 	me.load();
     }
-});
\ No newline at end of file
+});
diff --git a/www/manager/qemu/SendKeyMenu.js b/www/manager/qemu/SendKeyMenu.js
index 72f1a2d..95691e2 100644
--- a/www/manager/qemu/SendKeyMenu.js
+++ b/www/manager/qemu/SendKeyMenu.js
@@ -6,11 +6,11 @@ Ext.define('PVE.qemu.SendKeyMenu', {
         var me = this;
 
 	if (!me.nodename) { 
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var sendKey = function(key) {
@@ -26,77 +26,77 @@ Ext.define('PVE.qemu.SendKeyMenu', {
 	};
 
 	Ext.apply(me, {
-	    text: 'SendKey',
+	    text: gettext('SendKey'),
 	    menu: new Ext.menu.Menu({
 		height: 200,
 		items: [
 		    {
-			text: 'Ctrl-Alt-Delete', handler: function() {
+			text: gettext('Ctrl-Alt-Delete'), handler: function() {
 			    sendKey('ctrl-alt-delete');  
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-Backspace', handler: function() {
+			text: gettext('Ctrl-Alt-Backspace'), handler: function() {
 			    sendKey('ctrl-alt-backspace');  
 		    }
 		    },
 		    {
-			text: 'Ctrl-Alt-F1', handler: function() {
+			text: gettext('Ctrl-Alt-F1'), handler: function() {
 			    sendKey('ctrl-alt-f1');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F2', handler: function() {
+			text: gettext('Ctrl-Alt-F2'), handler: function() {
 			    sendKey('ctrl-alt-f2');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F3', handler: function() {
+			text: gettext('Ctrl-Alt-F3'), handler: function() {
 			    sendKey('ctrl-alt-f3');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F4', handler: function() {
+			text: gettext('Ctrl-Alt-F4'), handler: function() {
 			sendKey('ctrl-alt-f4');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F5', handler: function() {
+			text: gettext('Ctrl-Alt-F5'), handler: function() {
 			    sendKey('ctrl-alt-f5');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F6', handler: function() {
+			text: gettext('Ctrl-Alt-F6'), handler: function() {
 			    sendKey('ctrl-alt-f6');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F7', handler: function() {
+			text: gettext('Ctrl-Alt-F7'), handler: function() {
 			    sendKey('ctrl-alt-f7');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F8', handler: function() {
+			text: gettext('Ctrl-Alt-F8'), handler: function() {
 			    sendKey('ctrl-alt-f8');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F9', handler: function() {
+			text: gettext('Ctrl-Alt-F9'), handler: function() {
 			    sendKey('ctrl-alt-f9');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F10', handler: function() {
+			text: gettext('Ctrl-Alt-F10'), handler: function() {
 			    sendKey('ctrl-alt-f10');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F11', handler: function() {
+			text: gettext('Ctrl-Alt-F11'), handler: function() {
 			    sendKey('ctrl-alt-f11');
 			}
 		    },
 		    {
-			text: 'Ctrl-Alt-F12', handler: function() {
+			text: gettext('Ctrl-Alt-F12'), handler: function() {
 			    sendKey('ctrl-alt-f12');
 			}
 		    }
diff --git a/www/manager/qemu/StatusView.js b/www/manager/qemu/StatusView.js
index 357c000..ca7703e 100644
--- a/www/manager/qemu/StatusView.js
+++ b/www/manager/qemu/StatusView.js
@@ -7,12 +7,12 @@ Ext.define('PVE.qemu.StatusView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	var render_cpu = function(value, metaData, record, rowIndex, colIndex, store) {
@@ -28,25 +28,25 @@ Ext.define('PVE.qemu.StatusView', {
 
 	    var per = (value * 100);
 
-	    return per.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
+	    return Ext.String.format(gettext('{0}% of {1} {2}'), per.toFixed(1), maxcpu.toString(), (maxcpu > 1 ? gettext('CPUs') : gettext('CPU')));
 	};
 
 	var render_mem = function(value, metaData, record, rowIndex, colIndex, store) {
 	    var maxmem = me.getObjectValue('maxmem', 0);
 	    var per = (value / maxmem)*100;
-	    var text = "<div>Total: " + PVE.Utils.format_size(maxmem) + "</div>" + 
-		"<div>Used: " + PVE.Utils.format_size(value) + "</div>";
+	    var text = "<div>" + gettext("Total") + ": " + PVE.Utils.format_size(maxmem) + "</div>" + 
+		"<div>" + gettext("Used") + ": " + PVE.Utils.format_size(value) + "</div>";
 	    return text;
 	};
 
 	var rows = {
-	    name: { header: 'Name', defaultValue: 'no name specified' },
-	    status: { header: 'Status', defaultValue: 'unknown' },
-	    cpu: { header: 'CPU usage', required: true,  renderer: render_cpu },
+	    name: { header: gettext('Name'), defaultValue: 'no name specified' },
+	    status: { header: gettext('Status'), defaultValue: 'unknown' },
+	    cpu: { header: gettext('CPU usage'), required: true,  renderer: render_cpu },
 	    cpus: { visible: false },
-	    mem: { header: 'Memory usage', required: true,  renderer: render_mem },
+	    mem: { header: gettext('Memory usage'), required: true,  renderer: render_mem },
 	    maxmem: { visible: false },
-	    uptime: { header: 'Uptime', required: true, renderer: PVE.Utils.render_uptime }
+	    uptime: { header: gettext('Uptime'), required: true, renderer: PVE.Utils.render_uptime }
 	};
 
 	Ext.applyIf(me, {
diff --git a/www/manager/qemu/Summary.js b/www/manager/qemu/Summary.js
index d0de526..93d8611 100644
--- a/www/manager/qemu/Summary.js
+++ b/www/manager/qemu/Summary.js
@@ -7,26 +7,26 @@ Ext.define('PVE.qemu.Summary', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	if (!me.workspace) {
-	    throw "no workspace specified";
+	    throw gettext("no workspace specified");
 	}
 
 	if (!me.statusStore) {
-	    throw "no status storage specified";
+	    throw gettext("no status storage specified");
 	}
 
 	var rstore = me.statusStore;
 
 	var statusview = Ext.create('PVE.qemu.StatusView', {
-	    title: 'Status',
+	    title: gettext('Status'),
 	    pveSelNode: me.pveSelNode,
 	    width: 400,
 	    rstore: rstore
@@ -59,28 +59,28 @@ Ext.define('PVE.qemu.Summary', {
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "CPU usage %",
+		    title: gettext("CPU usage %"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'cpu',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Memory usage",
+		    title: gettext("Memory usage"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'mem,maxmem',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Network traffic",
+		    title: gettext("Network traffic"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'netin,netout',
 		    rrdurl: rrdurl
 		},
 		{
 		    xtype: 'pveRRDView',
-		    title: "Disk IO",
+		    title: gettext("Disk IO"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'diskread,diskwrite',
 		    rrdurl: rrdurl
diff --git a/www/manager/storage/Browser.js b/www/manager/storage/Browser.js
index 079997d..943a0dc 100644
--- a/www/manager/storage/Browser.js
+++ b/www/manager/storage/Browser.js
@@ -7,12 +7,12 @@ Ext.define('PVE.storage.Browser', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var storeid = me.pveSelNode.data.storage;
 	if (!storeid) {
-	    throw "no storage ID specified";
+	    throw gettext("no storage ID specified");
 	}
 
 	Ext.apply(me, {
diff --git a/www/manager/storage/ContentView.js b/www/manager/storage/ContentView.js
index c14c7b4..0d05bfa 100644
--- a/www/manager/storage/ContentView.js
+++ b/www/manager/storage/ContentView.js
@@ -13,17 +13,17 @@ Ext.define('PVE.storage.Upload', {
 	var xhr;
 
 	if (!me.nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.storage) { 
-	    throw "no storage ID specified";
+	    throw gettext("no storage ID specified");
 	}
 
 	var baseurl = "/nodes/" + me.nodename + "/storage/" + me.storage + "/upload";
 
 	var pbar = Ext.create('Ext.ProgressBar', {
-            text: 'Ready',
+            text: gettext('Ready'),
 	    hidden: true
 	});
 
@@ -41,19 +41,19 @@ Ext.define('PVE.storage.Upload', {
 		{
 		    xtype: 'pveKVComboBox',
 		    data: [
-			['iso', 'ISO image'],
-			['backup', 'VZDump backup file'],
-			['vztmpl', 'OpenVZ template']
+			['iso', gettext('ISO image')],
+			['backup', gettext('VZDump backup file')],
+			['vztmpl', gettext('OpenVZ template')]
 		    ],
-		    fieldLabel: 'Content type',
+		    fieldLabel: gettext('Content type'),
 		    name: 'content',
 		    value: 'iso'
 		},
 		{
 		    xtype: 'filefield',
 		    name: 'filename',
-		    filedLabel: 'File',
-		    buttonText: 'Select File...',
+		    filedLabel: gettext('File'),
+		    buttonText: gettext('Select File...'),
 		    allowBlank: false
 		},
 		pbar
@@ -65,13 +65,13 @@ Ext.define('PVE.storage.Upload', {
 	var doStandardSubmit = function() {
 	    form.submit({
 		url: "/api2/htmljs" + baseurl,
-		waitMsg: 'Uploading file...',
+		waitMsg: gettext('Uploading file...'),
 		success: function(f, action) {
 		    me.close();
 		},
 		failure: function(f, action) {
 		    var msg = PVE.Utils.extractFormActionError(action);
-                    Ext.Msg.alert('Failed', msg);
+                    Ext.Msg.alert(gettext('Failed'), msg);
 		}
 	    });
 	};
@@ -85,7 +85,7 @@ Ext.define('PVE.storage.Upload', {
 	};
  
 	var abortBtn = Ext.create('Ext.Button', {
-	    text: 'Abort',
+	    text: gettext('Abort'),
 	    disabled: true,
 	    handler: function() {
 		me.close();
@@ -93,7 +93,7 @@ Ext.define('PVE.storage.Upload', {
 	});
 
 	var submitBtn = Ext.create('Ext.Button', {
-	    text: 'Upload',
+	    text: gettext('Upload'),
 	    disabled: true,
 	    handler: function(button) {
 		var fd;
@@ -125,8 +125,8 @@ Ext.define('PVE.storage.Upload', {
 		    if (xhr.status == 200) {
 			me.close();
 		    } else {  
-			var msg = "Error " + xhr.status.toString() + ": " + Ext.htmlEncode(xhr.statusText);
-			Ext.Msg.alert('Upload failed', msg, function(btn) {
+			var msg = gettext("Error") + " " + xhr.status.toString() + ": " + Ext.htmlEncode(xhr.statusText);
+			Ext.Msg.alert(gettext('Upload failed'), msg, function(btn) {
 			    me.close();
 			});
 
@@ -134,8 +134,8 @@ Ext.define('PVE.storage.Upload', {
 		}, false);
 
 		xhr.addEventListener("error", function(e) {  
-		    var msg = "Error " + e.target.status.toString() + " occurred while receiving the document.";  
-		    Ext.Msg.alert('Upload failed', msg, function(btn) {
+		    var msg = gettext("Error") + " " + e.target.status.toString() + " occurred while receiving the document.";  
+		    Ext.Msg.alert(gettext('Upload failed'), msg, function(btn) {
 			me.close();
 		    });
 		});
@@ -157,7 +157,7 @@ Ext.define('PVE.storage.Upload', {
 	});
 
         Ext.applyIf(me, {
-           title: 'Upload',
+           title: gettext('Upload'),
 	    items: me.formPanel,
 	    buttons: [ abortBtn, submitBtn ],
 	    listeners: {
@@ -183,12 +183,12 @@ Ext.define('PVE.storage.ContentView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var storage = me.pveSelNode.data.storage;
 	if (!storage) { 
-	    throw "no storage ID specified";
+	    throw gettext("no storage ID specified");
 	}
 
 	var baseurl = "/nodes/" + nodename + "/storage/" + storage + "/content";
@@ -208,7 +208,7 @@ Ext.define('PVE.storage.ContentView', {
 	var sm = Ext.create('Ext.selection.RowModel', {});
 
 	var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
-            groupHeaderTpl: '{[ PVE.Utils.format_content_types(values.name) ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})'
+            groupHeaderTpl: '{[ PVE.Utils.format_content_types(values.name) ]} ({rows.length} {[values.rows.length > 1 ? gettext("Items") : gettext("Item")]})'
 	});
 
 	var reload = function() {
@@ -226,7 +226,7 @@ Ext.define('PVE.storage.ContentView', {
 	    tbar: [
 		{
 		    xtype: 'pveButton',
-		    text: 'Restore',
+		    text: gettext('Restore'),
 		    selModel: sm,
 		    disabled: true,
 		    enableFn: function(rec) {
@@ -254,11 +254,11 @@ Ext.define('PVE.storage.ContentView', {
 		},
 		{
 		    xtype: 'pveButton',
-		    text: 'Delete',
+		    text: gettext('Delete'),
 		    selModel: sm,
 		    disabled: true,
 		    confirmMsg: function(rec) {
-			return 'Are you sure you want to delete volume "' + rec.data.volid + '"';
+			return Ext.String.format(gettext('Are you sure you want to delete volume {0}'), '"' + rec.data.volid + '"');
 		    },
 		    enableFn: function(rec) {
 			return rec && rec.data.content !== 'images';
@@ -272,13 +272,13 @@ Ext.define('PVE.storage.ContentView', {
 				reload();
 			    },
 			    failure: function (response, opts) {
-				Ext.Msg.alert('Error', response.htmlStatus);
+				Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 			    }
 			});
 		    }
 		},
 		{
-		    text: 'Upload',
+		    text: gettext('Upload'),
 		    handler: function() {
 			var win = Ext.create('PVE.storage.Upload', {
 			    nodename: nodename,
@@ -291,19 +291,19 @@ Ext.define('PVE.storage.ContentView', {
 	    ],
 	    columns: [
 		{
-		    header: 'Name',
+		    header: gettext('Name'),
 		    flex: 1,
 		    sortable: true,
 		    renderer: PVE.Utils.render_storage_content,
 		    dataIndex: 'text'
 		},
 		{
-		    header: 'Format',
+		    header: gettext('Format'),
 		    width: 100,
 		    dataIndex: 'format'
 		},
 		{
-		    header: 'Size',
+		    header: gettext('Size'),
 		    width: 100,
 		    renderer: PVE.Utils.format_size,
 		    dataIndex: 'size'
@@ -336,4 +336,4 @@ Ext.define('PVE.storage.ContentView', {
 	idProperty: 'volid'
     });
 
-});
\ No newline at end of file
+});
diff --git a/www/manager/storage/DirEdit.js b/www/manager/storage/DirEdit.js
index b193c68..aa6c111 100644
--- a/www/manager/storage/DirEdit.js
+++ b/www/manager/storage/DirEdit.js
@@ -26,7 +26,7 @@ Ext.define('PVE.storage.DirInputPanel', {
 		name: 'storage',
 		height: 22, // hack: set same height as text fields
 		value: me.storageId || '',
-		fieldLabel: 'ID',
+		fieldLabel: gettext('ID'),
 		vtype: 'StorageId',
 		allowBlank: false
 	    },
diff --git a/www/manager/storage/IScsiEdit.js b/www/manager/storage/IScsiEdit.js
index 0001419..b16349f 100644
--- a/www/manager/storage/IScsiEdit.js
+++ b/www/manager/storage/IScsiEdit.js
@@ -46,7 +46,7 @@ Ext.define('PVE.storage.IScsiScan', {
 	    displayField: 'target',
 	    matchFieldWidth: false,
 	    listConfig: {
-		loadingText: 'Scanning...',
+		loadingText: gettext('Scanning...'),
 		width: 350
 	    }
 	});
@@ -86,7 +86,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
 		name: 'storage',
 		height: 22, // hack: set same height as text fields
 		value: me.storageId || '',
-		fieldLabel: 'ID',
+		fieldLabel: gettext('ID'),
 		vtype: 'StorageId',
 		allowBlank: false
 	    },
@@ -95,7 +95,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
 		height: 22, // hack: set same height as text fields
 		name: 'portal',
 		value: '',
-		fieldLabel: 'Portal',
+		fieldLabel: gettext('Portal'),
 		allowBlank: false,
 		listeners: {
 		    change: function(f, value) {
@@ -112,7 +112,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
 		xtype: me.create ? 'pveIScsiScan' : 'displayfield',
 		name: 'target',
 		value: '',
-		fieldLabel: 'Target',
+		fieldLabel: gettext('Target'),
 		allowBlank: false
 	    }
 	];
diff --git a/www/manager/storage/LVMEdit.js b/www/manager/storage/LVMEdit.js
index 7aae749..a8a0368 100644
--- a/www/manager/storage/LVMEdit.js
+++ b/www/manager/storage/LVMEdit.js
@@ -25,7 +25,7 @@ Ext.define('PVE.storage.VgSelector', {
 	    queryMode: 'local',
 	    editable: false,
 	    listConfig: {
-		loadingText: 'Scanning...'
+		loadingText: gettext('Scanning...')
 	    }
 	});
 
@@ -109,7 +109,7 @@ Ext.define('PVE.storage.LVMInputPanel', {
 		name: 'storage',
 		height: 22, // hack: set same height as text fields
 		value: me.storageId || '',
-		fieldLabel: 'ID',
+		fieldLabel: gettext('ID'),
 		vtype: 'StorageId',
 		submitValue: !!me.create,
 		allowBlank: false
diff --git a/www/manager/storage/NFSEdit.js b/www/manager/storage/NFSEdit.js
index 570ff90..a2e68d3 100644
--- a/www/manager/storage/NFSEdit.js
+++ b/www/manager/storage/NFSEdit.js
@@ -46,7 +46,7 @@ Ext.define('PVE.storage.NFSScan', {
 	    displayField: 'path',
 	    matchFieldWidth: false,
 	    listConfig: {
-		loadingText: 'Scanning...',
+		loadingText: gettext('Scanning...'),
 		width: 350
 	    }
 	});
@@ -83,7 +83,7 @@ Ext.define('PVE.storage.NFSInputPanel', {
 		name: 'storage',
 		height: 22, // hack: set same height as text fields
 		value: me.storageId || '',
-		fieldLabel: 'ID',
+		fieldLabel: gettext('ID'),
 		vtype: 'StorageId',
 		allowBlank: false
 	    },
@@ -109,7 +109,7 @@ Ext.define('PVE.storage.NFSInputPanel', {
 		height: 22, // hack: set same height as text fields
 		name: 'export',
 		value: '',
-		fieldLabel: 'Export',
+		fieldLabel: gettext('Export'),
 		allowBlank: false
 	    },
 	    {
diff --git a/www/manager/storage/StatusView.js b/www/manager/storage/StatusView.js
index be06b5f..8e7c9d9 100644
--- a/www/manager/storage/StatusView.js
+++ b/www/manager/storage/StatusView.js
@@ -7,47 +7,47 @@ Ext.define('PVE.storage.StatusView', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var storage = me.pveSelNode.data.storage;
 	if (!storage) {
-	    throw "no storage ID specified";
+	    throw gettext("no storage ID specified");
 	}
 
 	var rows = {
 	    disable: {
-		header: 'Enabled', 
+		header: gettext('Enabled'), 
 		required: true,
 		renderer: PVE.Utils.format_neg_boolean	
 	    },
 	    active: {
-		header: 'Active', 
+		header: gettext('Active'), 
 		required: true,		
 		renderer: PVE.Utils.format_boolean
 	    },
 	    content: {
-		header: 'Content', 
+		header: gettext('Content'), 
 		required: true,
 		renderer: PVE.Utils.format_content_types
 	    },
 	    type: {
-		header: 'Type', 
+		header: gettext('Type'), 
 		required: true,
 		renderer: PVE.Utils.format_storage_type
 	    },
 	    shared: {
-		header: 'Shared', 
+		header: gettext('Shared'), 
 		required: true,
 		renderer: PVE.Utils.format_boolean
 	    },
 	    total: {
-		header: 'Size', 
+		header: gettext('Size'), 
 		required: true, 
 		renderer: PVE.Utils.render_size
 	    },
 	    used: {
-		header: 'Used', 
+		header: gettext('Used'), 
 		required: true, 
 		renderer: function(value) {
 		    // do not confuse users with filesystem details
@@ -57,7 +57,7 @@ Ext.define('PVE.storage.StatusView', {
 		}
 	    },
 	    avail: {
-		header: 'Avail', 
+		header: gettext('Avail'), 
 		required: true, 
 		renderer: PVE.Utils.render_size
 	    }
diff --git a/www/manager/storage/Summary.js b/www/manager/storage/Summary.js
index c29b242..d4ceb37 100644
--- a/www/manager/storage/Summary.js
+++ b/www/manager/storage/Summary.js
@@ -7,16 +7,16 @@ Ext.define('PVE.storage.Summary', {
 
 	var nodename = me.pveSelNode.data.node;
 	if (!nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	var storage = me.pveSelNode.data.storage;
 	if (!storage) {
-	    throw "no storage ID specified";
+	    throw gettext("no storage ID specified");
 	}
 
 	var statusview = Ext.create('PVE.storage.StatusView', {
-	    title: 'Status',
+	    title: gettext('Status'),
 	    pveSelNode: me.pveSelNode,
 	    style: 'padding-top:0px'
 	});
@@ -42,7 +42,7 @@ Ext.define('PVE.storage.Summary', {
 		statusview,
 		{
 		    xtype: 'pveRRDView',
-		    title: "Usage",
+		    title: gettext("Usage"),
 		    pveSelNode: me.pveSelNode,
 		    datasource: 'total,used',
 		    rrdurl: rrdurl
diff --git a/www/manager/window/Backup.js b/www/manager/window/Backup.js
index 5787de0..7f19673 100644
--- a/www/manager/window/Backup.js
+++ b/www/manager/window/Backup.js
@@ -7,22 +7,22 @@ Ext.define('PVE.window.Backup', {
 	var me = this;
 
 	if (!me.nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	if (!me.vmtype) {
-	    throw "no VM type specified";
+	    throw gettext("no VM type specified");
 	}
 
 	var storagesel = Ext.create('PVE.form.StorageSelector', {
 	    nodename: me.nodename,
 	    name: 'storage',
 	    value: me.storage,
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    storageContent: 'backup',
 	    allowBlank: false
 	});
@@ -38,7 +38,7 @@ Ext.define('PVE.window.Backup', {
 		storagesel,
 		{
 		    xtype: 'pveBackupModeSelector',
-		    fieldLabel: 'Mode',
+		    fieldLabel: gettext('Mode'),
 		    value: 'snapshot',
 		    name: 'mode'
 		},
@@ -47,7 +47,7 @@ Ext.define('PVE.window.Backup', {
 		    name: 'compress',
 		    uncheckedValue: 0,
 		    checked: true,
-		    fieldLabel: 'Compress'
+		    fieldLabel: gettext('Compress')
 		}
 	    ]
 	});
@@ -87,8 +87,8 @@ Ext.define('PVE.window.Backup', {
 	});
 
 	var title = (me.vmtype === 'openvz') ? 
-	    "Backup CT " + me.vmid :
-	    "Backup VM " + me.vmid;
+	    Ext.String.format(gettext("Backup CT {0}"), me.vmid) :
+	    Ext.String.format(gettext("Backup VM {0}"), me.vmid);
 
 	Ext.apply(me, {
 	    title: title,
diff --git a/www/manager/window/Edit.js b/www/manager/window/Edit.js
index eb122de..6d6d0dc 100644
--- a/www/manager/window/Edit.js
+++ b/www/manager/window/Edit.js
@@ -137,7 +137,7 @@ Ext.define('PVE.window.Edit', {
 	var me = this;
 
 	if (!me.url) {
-	    throw "no url specified";
+	    throw gettext("no url specified");
 	}
 
 	var items = Ext.isArray(me.items) ? me.items : [ me.items ];
@@ -171,7 +171,7 @@ Ext.define('PVE.window.Edit', {
 	});
 
 	var resetBtn = Ext.create('Ext.Button', {
-	    text: 'Reset',
+	    text: gettext('Reset'),
 	    disabled: true,
 	    handler: function(){
 		form.reset();
diff --git a/www/manager/window/Migrate.js b/www/manager/window/Migrate.js
index 8239c2d..ecca1cc 100644
--- a/www/manager/window/Migrate.js
+++ b/www/manager/window/Migrate.js
@@ -11,7 +11,7 @@ Ext.define('PVE.window.Migrate', {
 	    waitMsgTarget: me,
 	    method: 'POST',
 	    failure: function(response, opts) {
-		Ext.Msg.alert('Error', response.htmlStatus);
+		Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 	    },
 	    success: function(response, options) {
 		var upid = response.result.data;
@@ -29,15 +29,15 @@ Ext.define('PVE.window.Migrate', {
 	var me = this;
 
 	if (!me.nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.vmid) {
-	    throw "no VM ID specified";
+	    throw gettext("no VM ID specified");
 	}
 
 	if (!me.vmtype) {
-	    throw "no VM type specified";
+	    throw gettext("no VM type specified");
 	}
 
 	me.formPanel = Ext.create('Ext.form.Panel', {
@@ -51,7 +51,7 @@ Ext.define('PVE.window.Migrate', {
 		{
 		    xtype: 'PVE.form.NodeSelector',
 		    name: 'target',
-		    fieldLabel: 'Target node',
+		    fieldLabel: gettext('Target node'),
 		    allowBlank: false,
 		    onlineValidator: true
 		},
@@ -60,7 +60,7 @@ Ext.define('PVE.window.Migrate', {
 		    name: 'online',
 		    uncheckedValue: 0,
 		    defaultValue: 0,
-		    fieldLabel: 'Online'
+		    fieldLabel: gettext('Online')
 		}
 	    ]
 	});
@@ -68,7 +68,7 @@ Ext.define('PVE.window.Migrate', {
 	var form = me.formPanel.getForm();
 
 	var submitBtn = Ext.create('Ext.Button', {
-	    text: 'Migrate',
+	    text: gettext('Migrate'),
 	    handler: function() {
 		var values = form.getValues();
 		me.migrate(values.target, values.online);
@@ -76,7 +76,7 @@ Ext.define('PVE.window.Migrate', {
 	});
 
 	Ext.apply(me, {
-	    title: "Migrate VM " + me.vmid,
+	    title: Ext.String.format(gettext("Migrate VM {0}"), me.vmid),
 	    width: 350,
 	    modal: true,
 	    layout: 'auto',
diff --git a/www/manager/window/NotesEdit.js b/www/manager/window/NotesEdit.js
index 868a46d..952e0a0 100644
--- a/www/manager/window/NotesEdit.js
+++ b/www/manager/window/NotesEdit.js
@@ -5,7 +5,7 @@ Ext.define('PVE.window.NotesEdit', {
 	var me = this;
 
 	Ext.apply(me, {
-	    title: "Notes",
+	    title: gettext("Notes"),
 	    width: 600,
 	    layout: 'fit',
 	    items: {
diff --git a/www/manager/window/Restore.js b/www/manager/window/Restore.js
index 8ee7c41..a97bad7 100644
--- a/www/manager/window/Restore.js
+++ b/www/manager/window/Restore.js
@@ -7,22 +7,22 @@ Ext.define('PVE.window.Restore', {
 	var me = this;
 
 	if (!me.nodename) {
-	    throw "no node name specified";
+	    throw gettext("no node name specified");
 	}
 
 	if (!me.volid) {
-	    throw "no volume ID specified";
+	    throw gettext("no volume ID specified");
 	}
 
 	if (!me.vmtype) {
-	    throw "no vmtype specified";
+	    throw gettext("no vmtype specified");
 	}
 
 	var storagesel = Ext.create('PVE.form.StorageSelector', {
 	    nodename: me.nodename,
 	    name: 'storage',
 	    value: '',
-	    fieldLabel: 'Storage',
+	    fieldLabel: gettext('Storage'),
 	    storageContent: (me.vmtype === 'openvz') ? 'rootdir' : 'images',
 	    allowBlank: true
 	});
@@ -38,13 +38,13 @@ Ext.define('PVE.window.Restore', {
 		{
 		    xtype: 'displayfield',
 		    value: me.volidText || me.volid,
-		    fieldLabel: 'Source'
+		    fieldLabel: gettext('Source')
 		},
 		storagesel,
 		{
 		    xtype: me.vmid ? 'displayfield' : 'pveVMIDSelector',
 		    name: 'vmid',
-		    fieldLabel: 'VM ID',
+		    fieldLabel: gettext('VM ID'),
 		    value: me.vmid || PVE.data.ResourceStore.findNextVMID(),
 		    validateExists: false
 		}
@@ -74,7 +74,7 @@ Ext.define('PVE.window.Restore', {
 	};
 
 	var submitBtn = Ext.create('Ext.Button', {
-	    text: 'Restore',
+	    text: gettext('Restore'),
 	    handler: function(){
 		var storage = storagesel.getValue();
 		var values = form.getValues();
@@ -94,13 +94,12 @@ Ext.define('PVE.window.Restore', {
 		    url = '/nodes/' + me.nodename + '/qemu';
 		    params.archive = me.volid;
 		} else {
-		    throw 'unknown VM type';
+		    throw gettext('unknown VM type');
 		}
 
 		if (me.vmid) {
-		    var msg = 'Are you sure you want to restore this VM"? ' +
-			'This will permanently erase current VM data.';
-		    Ext.Msg.confirm('Confirmation', msg, function(btn) {
+		    var msg = Ext.String.format(gettext('Are you sure you want to restore VM {0}? This will permanently erase current VM data.'), me.vmid);
+		    Ext.Msg.confirm(gettext('Confirmation'), msg, function(btn) {
 			if (btn !== 'yes') {
 			    return;
 			}
diff --git a/www/manager/window/TaskViewer.js b/www/manager/window/TaskViewer.js
index 212f2ff..e21686a 100644
--- a/www/manager/window/TaskViewer.js
+++ b/www/manager/window/TaskViewer.js
@@ -12,39 +12,39 @@ Ext.define('PVE.window.TaskViewer', {
         var me = this;
 
 	if (!me.upid) {
-	    throw "no task specified";
+	    throw gettext("no task specified");
 	}
 
 	var task = PVE.Utils.parse_task_upid(me.upid);
 
 	var rows = {
 	    status: {
-		header: 'Status',
+		header: gettext('Status'),
 		defaultValue: 'unknown'
 	    },
 	    type: {
-		header: 'Task type',
+		header: gettext('Task type'),
 		required: true
 	    },
 	    user: {
-		header: 'User name',
+		header: gettext('User name'),
 		required: true 
 	    },
 	    node: {
-		header: 'Node',
+		header: gettext('Node'),
 		required: true 
 	    },
 	    pid: {
-		header: 'Process ID',
+		header: gettext('Process ID'),
 		required: true
 	    },
 	    starttime: {
-		header: 'Start time',
+		header: gettext('Start time'),
 		required: true, 
 		renderer: PVE.Utils.render_timestamp
 	    },
 	    upid: {
-		header: 'Unique task ID'
+		header: gettext('Unique task ID')
 	    }
 	};
 
@@ -68,19 +68,19 @@ Ext.define('PVE.window.TaskViewer', {
 	};
 
 	var stop_btn1 = new Ext.Button({
-	    text: 'Stop',
+	    text: gettext('Stop'),
 	    disabled: true,
 	    handler: stop_task
 	});
 
 	var stop_btn2 = new Ext.Button({
-	    text: 'Stop',
+	    text: gettext('Stop'),
 	    disabled: true,
 	    handler: stop_task
 	});
 
 	var statgrid = Ext.create('PVE.grid.ObjectGrid', {
-	    title: 'Status',
+	    title: gettext('Status'),
 	    layout: 'fit',
 	    tbar: [ stop_btn1 ],
 	    rstore: statstore,
@@ -89,7 +89,7 @@ Ext.define('PVE.window.TaskViewer', {
 	});
 
 	var logView = Ext.create('PVE.panel.LogView', {
-	    title: 'Output',
+	    title: gettext('Output'),
 	    tbar: [ stop_btn2 ],
 	    border: false,
 	    url: "/api2/extjs/nodes/" + task.node + "/tasks/" + me.upid + "/log"
@@ -111,7 +111,7 @@ Ext.define('PVE.window.TaskViewer', {
 	statstore.startUpdate();
 
 	Ext.applyIf(me, {
-	    title: "Task viewer: " + task.desc,
+	    title: gettext("Task viewer: ") + task.desc,
 	    width: 800,
 	    height: 400,
 	    layout: 'fit',
diff --git a/www/manager/window/Wizard.js b/www/manager/window/Wizard.js
index 1b95389..8e346b9 100644
--- a/www/manager/window/Wizard.js
+++ b/www/manager/window/Wizard.js
@@ -70,7 +70,7 @@ Ext.define('PVE.window.Wizard', {
 	    items: [  
 		'->', 
 		{ 
-		    text: 'Back',
+		    text: gettext('Back'),
 		    disabled: true,
 		    itemId: 'back',
 		    minWidth: 60,
@@ -90,7 +90,7 @@ Ext.define('PVE.window.Wizard', {
 		    }
 		},
 		{
-		    text: 'Next',
+		    text: gettext('Next'),
 		    disabled: true,
 		    itemId: 'next',
 		    minWidth: 60,
@@ -114,7 +114,7 @@ Ext.define('PVE.window.Wizard', {
 		    }
 		},
 		{
-		    text: 'Finish',
+		    text: gettext('Finish'),
 		    minWidth: 60,
 		    hidden: true,
 		    itemId: 'submit',
@@ -179,7 +179,7 @@ Ext.define('PVE.window.Wizard', {
 	    closable: true,
 	    resizable: false,
 	    layout: 'border',
-	    title: 'Proxmox VE Wizard',
+	    title: gettext('Proxmox VE Wizard'),
 	    items: [
 		{
 		    // disabled for now - not really needed
-- 
1.7.5.4



More information about the pve-devel mailing list