[node-patches] Change in ovirt-node[master]: i18n patch support language: english, chinese
boh.ricky at gmail.com
boh.ricky at gmail.com
Tue Aug 20 14:37:00 UTC 2013
hai bo has uploaded a new change for review.
Change subject: i18n patch support language: english, chinese
......................................................................
i18n patch
support language: english, chinese
Change-Id: I7f7e44dc46069aecd00950279a3800d496b1c555
Signed-off-by: boh.ricky <boh.ricky at gmail.com>
---
M ovirt-node.spec.in
M recipe/common-minimizer.ks
M src/Makefile.am
M src/ovirt/node/installer/__main__.py
M src/ovirt/node/installer/core/boot_device_page.py
M src/ovirt/node/installer/core/installation_device_page.py
M src/ovirt/node/installer/core/keyboard_page.py
M src/ovirt/node/installer/core/password_page.py
M src/ovirt/node/installer/core/progress_page.py
M src/ovirt/node/installer/core/storage_vol_page.py
M src/ovirt/node/installer/core/upgrade_page.py
M src/ovirt/node/installer/core/welcome_page.py
A src/ovirt/node/locale/en_US/LC_MESSAGES/ovirt_node.mo
A src/ovirt/node/locale/ovirt_node.pot
A src/ovirt/node/locale/ovirt_node_cn.po
A src/ovirt/node/locale/ovirt_node_en.po
A src/ovirt/node/locale/zh_CN/LC_MESSAGES/ovirt_node.mo
M src/ovirt/node/setup/__main__.py
M src/ovirt/node/setup/core/diagnostics_page.py
M src/ovirt/node/setup/core/kdump_page.py
M src/ovirt/node/setup/core/keyboard_page.py
M src/ovirt/node/setup/core/logging_page.py
M src/ovirt/node/setup/core/monitoring_page.py
M src/ovirt/node/setup/core/network_page.py
M src/ovirt/node/setup/core/performance_page.py
M src/ovirt/node/setup/core/ping.py
M src/ovirt/node/setup/core/plugins_page.py
M src/ovirt/node/setup/core/remote_storage_page.py
M src/ovirt/node/setup/core/security_page.py
M src/ovirt/node/setup/core/status_page.py
M src/ovirt/node/setup/core/support_page.py
M src/ovirt/node/ui/__init__.py
32 files changed, 3,019 insertions(+), 279 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/35/18335/1
diff --git a/ovirt-node.spec.in b/ovirt-node.spec.in
index dec41ef..fcb9f5c 100644
--- a/ovirt-node.spec.in
+++ b/ovirt-node.spec.in
@@ -612,6 +612,8 @@
%{python_sitelib}/ovirt/__init__.py*
%{python_sitelib}/ovirt/node/*.py*
%{python_sitelib}/ovirt/node/ui/*.py*
+/usr/share/locale/zh_CN/LC_MESSAGES/*.mo
+/usr/share/locale/en_US/LC_MESSAGES/*.mo
%{python_sitelib}/ovirt/node/utils/*.py*
%{python_sitelib}/ovirt/node/tools/*.py*
%{python_sitelib}/ovirt/node/config/*.py*
diff --git a/recipe/common-minimizer.ks b/recipe/common-minimizer.ks
index ff6b3db..58bfae3 100644
--- a/recipe/common-minimizer.ks
+++ b/recipe/common-minimizer.ks
@@ -250,6 +250,7 @@
drop /usr/share/doc
drop /usr/share/locale/
keep /usr/share/locale/en_US
+keep /usr/share/locale/zh_CN
drop /usr/share/man
drop /usr/share/X11
drop /usr/share/i18n
diff --git a/src/Makefile.am b/src/Makefile.am
index 194de0c..d6dff54 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -52,6 +52,8 @@
pyovirtdir = $(pythondir)/ovirt
pyovirt_nodedir = $(pyovirtdir)/node
pyovirt_node_configdir = $(pyovirt_nodedir)/config
+ovirt_node_locale_cndir = /usr/share/locale/zh_CN/LC_MESSAGES
+ovirt_node_locale_endir = /usr/share/locale/en_US/LC_MESSAGES
pyovirt_node_uidir = $(pyovirt_nodedir)/ui
pyovirt_node_utilsdir = $(pyovirt_nodedir)/utils
pyovirt_node_toolsdir = $(pyovirt_nodedir)/tools
@@ -81,6 +83,13 @@
ovirt/node/app.py \
ovirt/node/base.py
+dist_ovirt_node_locale_cn_DATA = \
+ ovirt/node/locale/zh_CN/LC_MESSAGES/ovirt_node.mo
+
+dist_ovirt_node_locale_en_DATA = \
+ ovirt/node/locale/en_US/LC_MESSAGES/ovirt_node.mo
+
+
pyovirt_node_config_PYTHON = \
ovirt/node/config/__init__.py \
ovirt/node/config/defaults.py \
diff --git a/src/ovirt/node/installer/__main__.py b/src/ovirt/node/installer/__main__.py
index b3a95be..9dbcd60 100644
--- a/src/ovirt/node/installer/__main__.py
+++ b/src/ovirt/node/installer/__main__.py
@@ -24,8 +24,11 @@
"""
from ovirt.node import app, installer
+import gettext
if __name__ == '__main__':
+ gettext.install('ovirt_node', '/usr/share/locale', unicode=True)
+
app = app.Application(installer)
app.run()
diff --git a/src/ovirt/node/installer/core/boot_device_page.py b/src/ovirt/node/installer/core/boot_device_page.py
index 13708ad..bb3a686 100644
--- a/src/ovirt/node/installer/core/boot_device_page.py
+++ b/src/ovirt/node/installer/core/boot_device_page.py
@@ -35,7 +35,7 @@
self.storage_discovery.run()
def name(self):
- return "Boot Device"
+ return _("Boot Device")
def rank(self):
return 20
@@ -56,7 +56,7 @@
}
def ui_content(self):
- page_title = "Please select the disk to use for booting %s" % \
+ page_title = _("Please select the disk to use for booting %s") % \
self.application.product.PRODUCT_SHORT
other_device = self._model.get("boot.device.custom", "")
@@ -66,17 +66,17 @@
if devices:
ws += [ui.Table("boot.device", "", " %6s %11s %5s" %
- ("Location", "Device Name", "Size"), devices),
- DeviceDetails("label.details", self, "(No device)")
+ (_("Location"), _("Device Name"), _("Size")), devices),
+ DeviceDetails("label.details", self, _("(No device)"))
]
else:
ws += [ui.Label("boot.no_device",
- "No Valid Boot Devices Detected")]
+ _("No Valid Boot Devices Detected"))]
page = ui.Page("boot", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Continue")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Continue"))]
self.widgets.add(page)
return page
@@ -177,17 +177,17 @@
all_devices = self._plugin.storage_discovery.all_devices()
device = all_devices[device_name]
- lines = [("Device", device.name),
- ("Model", device.model),
- ("Bus Type", device.bus),
- ("Serial", device.serial),
- ("Size (GB)", device.size),
- ("Description", device.desc),
+ lines = [(_("Device"), device.name),
+ (_("Model"), device.model),
+ (_("Bus Type"), device.bus),
+ (_("Serial"), device.serial),
+ (_("Size (GB)"), device.size),
+ (_("Description"), device.desc),
]
width = max([len(o[0]) for o in lines])
- txt = "Disk Details\n"
- txt += "\n".join(["%s: %s" % (("{0:%d}" % width).format(a), b)
+ txt = _("Disk Details\n").encode('utf8')
+ txt += "\n".join(["%s: %s" % (("{0:%d}" % width).format(a.encode('utf8')), b.encode('utf8'))
for a, b in lines])
self.text(txt)
@@ -201,12 +201,12 @@
"""The dialog to input a custom root/boot device
"""
def __init__(self, path, title, description):
- title = "Custom Block Device"
+ title = _("Custom Block Device")
- device_entry = ui.Entry("boot.device.custom", "Device path:")
+ device_entry = ui.Entry("boot.device.custom", _("Device path:"))
children = [ui.Label("label[0]", description),
ui.Divider("divider[0]"),
device_entry]
super(CustomDeviceDialog, self).__init__(path, title, children)
- self.buttons = [ui.SaveButton("dialog.device.custom.save"),
- ui.CloseButton("dialog.device.custom.close", "Cancel")]
+ self.buttons = [ui.SaveButton("dialog.device.custom.save", _("Save")),
+ ui.CloseButton("dialog.device.custom.close", _("Cancel"))]
diff --git a/src/ovirt/node/installer/core/installation_device_page.py b/src/ovirt/node/installer/core/installation_device_page.py
index f1c4d8d..f6cb87e 100644
--- a/src/ovirt/node/installer/core/installation_device_page.py
+++ b/src/ovirt/node/installer/core/installation_device_page.py
@@ -36,7 +36,7 @@
self.storage_discovery.start()
def name(self):
- return "Data Device"
+ return _("Data Device")
def rank(self):
return 30
@@ -57,8 +57,7 @@
return {"installation.device.current": has_selection}
def ui_content(self):
- page_title = "Please select the disk(s) to use for installation " \
- "of %s" % self.application.product.PRODUCT_SHORT
+ page_title = _("Please select the disk(s) to use for installation of %s") % self.application.product.PRODUCT_SHORT
other_device = self._model.get("installation.device.custom", "")
devices = self.storage_discovery.all_devices_for_ui_table(other_device)
@@ -68,19 +67,19 @@
if devices:
ws += [ui.Table("installation.device.current", "",
" %6s %11s %5s" %
- ("Location", "Device Name", "Size"), devices,
+ (_("Location"), _("Device Name"), _("Size")), devices,
multi=True),
DeviceDetails("installation.device.details", self,
- "(No device)")
+ _("(No device)"))
]
else:
ws += [ui.Label("installation.no_device",
- "No Valid Install Devices Detected")]
+ _("No Valid Install Devices Detected"))]
page = ui.Page("installation", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Continue")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Continue"))]
self.widgets.add(page)
return page
diff --git a/src/ovirt/node/installer/core/keyboard_page.py b/src/ovirt/node/installer/core/keyboard_page.py
index 3f6ddb9..ff35676 100644
--- a/src/ovirt/node/installer/core/keyboard_page.py
+++ b/src/ovirt/node/installer/core/keyboard_page.py
@@ -32,7 +32,7 @@
_model = {}
def name(self):
- return "Keyboard"
+ return _("Keyboard")
def rank(self):
return 10
@@ -47,16 +47,16 @@
kbd = system.Keyboard()
c = kbd.get_current()
self.logger.debug("Current layout: %s" % c)
- ws = [ui.Header("header[0]", "Keyboard Layout Selection"),
- ui.Table("keyboard.layout", "", "Available Keyboard Layouts",
+ ws = [ui.Header("header[0]", _("Keyboard Layout Selection")),
+ ui.Table("keyboard.layout", "", _("Available Keyboard Layouts"),
kbd.available_layouts(), c),
- ui.Label("label[0]", "(Hit Enter to select a layout)")
+ ui.Label("label[0]", _("(Hit Enter to select a layout)"))
]
self.widgets.add(ws)
page = ui.Page("keyboard", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Continue")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Continue"))]
return page
def on_change(self, changes):
diff --git a/src/ovirt/node/installer/core/password_page.py b/src/ovirt/node/installer/core/password_page.py
index 60ea3f8..33cb432 100644
--- a/src/ovirt/node/installer/core/password_page.py
+++ b/src/ovirt/node/installer/core/password_page.py
@@ -30,7 +30,7 @@
_model = {}
def name(self):
- return "Console Password"
+ return _("Console Password")
def rank(self):
return 50
@@ -43,19 +43,19 @@
def ui_content(self):
ws = [ui.Header("header[0]",
- "Require a password for the admin user?"),
+ _("Require a password for the admin user?")),
ui.Divider("divider[0]"),
- ui.PasswordEntry("admin.password", "Password:"),
+ ui.PasswordEntry("admin.password", _("Password:")),
ui.PasswordEntry("admin.password_confirmation",
- "Confirm Password:"),
+ _("Confirm Password:")),
ui.Divider("divider[1]"),
ui.Label("password.info", "")
]
self.widgets.add(ws)
page = ui.Page("password", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Install")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Install"))]
return page
def on_change(self, changes):
diff --git a/src/ovirt/node/installer/core/progress_page.py b/src/ovirt/node/installer/core/progress_page.py
index d075748..25edfb8 100644
--- a/src/ovirt/node/installer/core/progress_page.py
+++ b/src/ovirt/node/installer/core/progress_page.py
@@ -37,7 +37,7 @@
self._worker = InstallerThread(self)
def name(self):
- return "Installation Progress"
+ return _("Installation Progress")
def rank(self):
return 60
@@ -49,7 +49,7 @@
return {}
def ui_content(self):
- method = "Installing"
+ method = _("Installing")
product = self.application.product.PRODUCT_SHORT
ws = [ui.Header("header[0]", "%s %s" % (method, product)),
ui.Divider("divider[0]"),
@@ -57,7 +57,7 @@
ui.Divider("divider[1]"),
ui.Label("log", ""),
ui.Divider("divider[2]"),
- ui.Button("action.reboot", "Reboot")
+ ui.Button("action.reboot", _("Reboot"))
]
self.widgets.add(ws)
page = ui.Page("progress", ws)
@@ -190,7 +190,7 @@
return config
class UpdateDefaultsFromModels(utils.Transaction.Element):
- title = "Writing configuration file"
+ title = _("Writing configuration file")
def __init__(self, cfg):
super(InstallerThread.UpdateDefaultsFromModels, self).__init__()
@@ -218,7 +218,7 @@
# Everything done during prepare
class PartitionAndFormat(utils.Transaction.Element):
- title_tpl = "Partitioning and Creating File Systems on '%s'"
+ title_tpl = _("Partitioning and Creating File Systems on '%s'")
def __init__(self, dst):
self.dst = dst
@@ -235,7 +235,7 @@
raise RuntimeError("Failed to partition/format")
class SetPassword(utils.Transaction.Element):
- title = "Setting Admin Password"
+ title = _("Setting Admin Password")
def __init__(self, admin_password):
super(InstallerThread.SetPassword, self).__init__()
@@ -252,10 +252,10 @@
def __init__(self, dst=None):
self.dst = dst
if dst:
- self.title = "Installing Image and Bootloader " + \
- "Configuration to '%s'" % dst
+ self.title = _("Installing Image and Bootloader ") + \
+ _("Configuration to '%s'") % dst
else:
- self.title = "Updating Image and Bootloader"
+ self.title = _("Updating Image and Bootloader")
super(InstallerThread.InstallImageAndBootloader, self).__init__()
def commit(self):
@@ -266,7 +266,7 @@
raise RuntimeError("Failed to set install bootloader")
class SetKeyboardLayout(utils.Transaction.Element):
- title_tpl = "Setting keyboard layout to '%s'"
+ title_tpl = _("Setting keyboard layout to '%s'")
def __init__(self, kbd_layout):
self.kbd_layout = kbd_layout
diff --git a/src/ovirt/node/installer/core/storage_vol_page.py b/src/ovirt/node/installer/core/storage_vol_page.py
index 718cb02..353ae97 100644
--- a/src/ovirt/node/installer/core/storage_vol_page.py
+++ b/src/ovirt/node/installer/core/storage_vol_page.py
@@ -29,7 +29,7 @@
_model = {}
def name(self):
- return "Storage Sizes"
+ return _("Storage Sizes")
def rank(self):
return 40
@@ -58,26 +58,26 @@
}
def ui_content(self):
- ws = [ui.Header("header[0]", "Storage Volumes"),
- ui.Label("label[0]", "Please enter the sizes for the " +
- "following partitions in MB"),
+ ws = [ui.Header("header[0]", _("Storage Volumes")),
+ ui.Label("label[0]", _("Please enter the sizes for the ") +
+ _("following partitions in MB")),
ui.Divider("divider[0]"),
- ui.Entry("storage.efi_size", "UEFI/Bios:", enabled=False),
+ ui.Entry("storage.efi_size", _("UEFI/Bios:"), enabled=False),
ui.Divider("divider[1]"),
- ui.Entry("storage.root_size", "Root & RootBackup:",
+ ui.Entry("storage.root_size", _("Root & RootBackup:"),
enabled=False),
- ui.Label("label[1]", "(2 partitions at 512MB each)"),
+ ui.Label("label[1]", _("(2 partitions at 512MB each)")),
ui.Divider("divider[2]"),
- ui.Entry("storage.swap_size", "Swap:"),
- ui.Entry("storage.config_size", "Config:"),
- ui.Entry("storage.logging_size", "Logging:"),
- ui.Entry("storage.data_size", "Data:"),
+ ui.Entry("storage.swap_size", _("Swap:")),
+ ui.Entry("storage.config_size", _("Config:")),
+ ui.Entry("storage.logging_size", _("Logging:")),
+ ui.Entry("storage.data_size", _("Data:")),
]
self.widgets.add(ws)
page = ui.Page("storage", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Next")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Next"))]
return page
def on_change(self, changes):
diff --git a/src/ovirt/node/installer/core/upgrade_page.py b/src/ovirt/node/installer/core/upgrade_page.py
index 8d900bc..ecdcb72 100644
--- a/src/ovirt/node/installer/core/upgrade_page.py
+++ b/src/ovirt/node/installer/core/upgrade_page.py
@@ -36,7 +36,7 @@
"current admin password will be used."
def name(self):
- return "Upgrade Password"
+ return _("Upgrade Password")
def rank(self):
return 150
@@ -49,28 +49,28 @@
def ui_content(self):
ws = [ui.Header("header[0]",
- "Require a password for the admin user?"),
- ui.Label("label[0]", "Please enter the current admin " +
- "password. You may also change the admin password " +
- "if required. If the new password fields are left" +
- "blank the password will remain the same."),
- ui.Label("label[1]", "Password for the admin user"),
+ _("Require a password for the admin user?")),
+ ui.Label("label[0]", _("Please enter the current admin ") +
+ _("password. You may also change the admin password ") +
+ _("if required. If the new password fields are left") +
+ _("blank the password will remain the same.")),
+ ui.Label("label[1]", _("Password for the admin user")),
ui.Divider("divider[0]"),
ui.PasswordEntry("upgrade.current_password",
- "Current Password:"),
+ _("Current Password:")),
ui.Divider("divider[1]"),
- ui.PasswordEntry("upgrade.password", "Password:"),
+ ui.PasswordEntry("upgrade.password", _("Password:")),
ui.PasswordEntry("upgrade.password_confirmation",
- "Confirm Password:"),
+ _("Confirm Password:")),
ui.Divider("divider[2]"),
ui.Label("current_password.info", ""),
ui.Label("password.info", self.__no_new_password_msg)
]
self.widgets.add(ws)
page = ui.Page("password", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit"),
- ui.Button("button.back", "Back"),
- ui.SaveButton("button.next", "Update")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit")),
+ ui.Button("button.back", _("Back")),
+ ui.SaveButton("button.next", _("Update"))]
return page
def on_change(self, changes):
diff --git a/src/ovirt/node/installer/core/welcome_page.py b/src/ovirt/node/installer/core/welcome_page.py
index ae4c939..b594e13 100644
--- a/src/ovirt/node/installer/core/welcome_page.py
+++ b/src/ovirt/node/installer/core/welcome_page.py
@@ -40,7 +40,7 @@
_model = {}
def name(self):
- return "Welcome"
+ return _("Welcome")
def rank(self):
return 0
@@ -52,13 +52,13 @@
return {}
def ui_content(self):
- ws = [ui.Header("header[0]", "Installation")]
+ ws = [ui.Header("header[0]", _("Installation"))]
ws += self.___installation_options()
ws += [ui.Divider("divider[0]")]
ws += self.__additional_infos()
self.widgets.add(ws)
page = ui.Page("welcome", ws)
- page.buttons = [ui.QuitButton("button.quit", "Quit")]
+ page.buttons = [ui.QuitButton("button.quit", _("Quit"))]
return page
def on_change(self, changes):
@@ -81,10 +81,10 @@
def ___installation_options(self):
if self.application.args.dry:
- return [ui.Button("button.install", "Install (dry)"),
- ui.Button("button.upgrade", "Upgrade (dry)"),
- ui.Button("button.downgrade", "Downgrade (dry)"),
- ui.Button("button.reinstall", "Reinstall (dry)")]
+ return [ui.Button("button.install", _("Install (dry)")),
+ ui.Button("button.upgrade", _("Upgrade (dry)")),
+ ui.Button("button.downgrade", _("Downgrade (dry)")),
+ ui.Button("button.reinstall", _("Reinstall (dry)"))]
media = utils.system.InstallationMedia()
@@ -92,37 +92,37 @@
has_root = os.path.exists("/dev/disk/by-label/ROOT")
if has_hostvg and has_root:
- return [ui.Label("Major version upgrades are unsupported, " +
- "uninstall existing version first")]
+ return [ui.Label(_("Major version upgrades are unsupported, ") +
+ _("uninstall existing version first"))]
if has_hostvg:
try:
installed = utils.system.InstalledMedia()
if media > installed:
return [ui.Button("button.upgrade",
- "Upgrade %s to %s" % (installed, media))]
+ _("Upgrade %s to %s") % (installed, media))]
elif media < installed:
return [ui.Button("button.downgrade",
- "Downgrade %s to %s" % (installed,
+ _("Downgrade %s to %s") % (installed,
media))]
return [ui.Button("button.reinstall",
- "Reinstall %s" % installed)]
+ _("Reinstall %s") % installed)]
except:
self.logger.error("Unable to get version numbers for " +
"upgrade, invalid installation or media")
return [ui.Label("lbl.failinstall",
- "Invalid installation, please reboot from " +
- "media and choose Reinstall")]
+ _("Invalid installation, please reboot from ") +
+ _("media and choose Reinstall"))]
- return [ui.Button("button.install", "Install Hypervisor %s" % media)]
+ return [ui.Button("button.install", _("Install Hypervisor %s") % media)]
def __additional_infos(self):
ws = []
- ws.append(ui.Label("welcome.virt", "Info: %s" %
+ ws.append(ui.Label("welcome.virt", _("Info: %s") %
virt.hardware_status()))
if system.is_efi():
ws.append(ui.Label("welcome.efi",
- "Info: Machine is booted in EFI mode"))
+ _("Info: Machine is booted in EFI mode")))
if self.application.args.dry:
- ws.append(ui.Label("dry", "Info: DRY MODE"))
+ ws.append(ui.Label("dry", _("Info: DRY MODE")))
return ws
diff --git a/src/ovirt/node/locale/en_US/LC_MESSAGES/ovirt_node.mo b/src/ovirt/node/locale/en_US/LC_MESSAGES/ovirt_node.mo
new file mode 100644
index 0000000..c3dbe0b
--- /dev/null
+++ b/src/ovirt/node/locale/en_US/LC_MESSAGES/ovirt_node.mo
Binary files differ
diff --git a/src/ovirt/node/locale/ovirt_node.pot b/src/ovirt/node/locale/ovirt_node.pot
new file mode 100644
index 0000000..0e11c12
--- /dev/null
+++ b/src/ovirt/node/locale/ovirt_node.pot
@@ -0,0 +1,908 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR ORGANIZATION
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2013-08-19 16:04+CST\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+"Generated-By: pygettext.py 1.5\n"
+
+
+#: installer/core/boot_device_page.py:38
+msgid "Boot Device"
+msgstr ""
+
+#: installer/core/boot_device_page.py:59
+msgid "Please select the disk to use for booting %s"
+msgstr ""
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Device Name"
+msgstr ""
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Location"
+msgstr ""
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Size"
+msgstr ""
+
+#: installer/core/boot_device_page.py:70
+#: installer/core/installation_device_page.py:73
+msgid "(No device)"
+msgstr ""
+
+#: installer/core/boot_device_page.py:74
+msgid "No Valid Boot Devices Detected"
+msgstr ""
+
+#: installer/core/boot_device_page.py:77
+#: installer/core/installation_device_page.py:80
+#: installer/core/keyboard_page.py:57 installer/core/password_page.py:56
+#: installer/core/storage_vol_page.py:78 installer/core/upgrade_page.py:71
+#: installer/core/welcome_page.py:61
+msgid "Quit"
+msgstr ""
+
+#: installer/core/boot_device_page.py:78
+#: installer/core/installation_device_page.py:81
+#: installer/core/keyboard_page.py:58 installer/core/password_page.py:57
+#: installer/core/storage_vol_page.py:79 installer/core/upgrade_page.py:72
+msgid "Back"
+msgstr ""
+
+#: installer/core/boot_device_page.py:79
+#: installer/core/installation_device_page.py:82
+#: installer/core/keyboard_page.py:59
+msgid "Continue"
+msgstr ""
+
+#: installer/core/boot_device_page.py:180
+msgid "Device"
+msgstr ""
+
+#: installer/core/boot_device_page.py:181
+msgid "Model"
+msgstr ""
+
+#: installer/core/boot_device_page.py:182
+msgid "Bus Type"
+msgstr ""
+
+#: installer/core/boot_device_page.py:183
+msgid "Serial"
+msgstr ""
+
+#: installer/core/boot_device_page.py:184
+msgid "Size (GB)"
+msgstr ""
+
+#: installer/core/boot_device_page.py:185
+msgid "Description"
+msgstr ""
+
+#: installer/core/boot_device_page.py:189
+msgid ""
+"Disk Details\n"
+msgstr ""
+
+#: installer/core/boot_device_page.py:204
+msgid "Custom Block Device"
+msgstr ""
+
+#: installer/core/boot_device_page.py:206
+msgid "Device path:"
+msgstr ""
+
+#: installer/core/boot_device_page.py:211 setup/core/network_page.py:556
+#: ui/__init__.py:779 ui/__init__.py:799
+msgid "Save"
+msgstr ""
+
+#: installer/core/boot_device_page.py:212
+msgid "Cancel"
+msgstr ""
+
+#: installer/core/installation_device_page.py:39
+msgid "Data Device"
+msgstr ""
+
+#: installer/core/installation_device_page.py:60
+msgid "Please select the disk(s) to use for installation of %s"
+msgstr ""
+
+#: installer/core/installation_device_page.py:77
+msgid "No Valid Install Devices Detected"
+msgstr ""
+
+#: installer/core/keyboard_page.py:35 setup/core/keyboard_page.py:34
+msgid "Keyboard"
+msgstr ""
+
+#: installer/core/keyboard_page.py:50 setup/core/keyboard_page.py:55
+msgid "Keyboard Layout Selection"
+msgstr ""
+
+#: installer/core/keyboard_page.py:51 setup/core/keyboard_page.py:61
+msgid "Available Keyboard Layouts"
+msgstr ""
+
+#: installer/core/keyboard_page.py:53
+msgid "(Hit Enter to select a layout)"
+msgstr ""
+
+#: installer/core/password_page.py:33
+msgid "Console Password"
+msgstr ""
+
+#: installer/core/password_page.py:46 installer/core/upgrade_page.py:52
+msgid "Require a password for the admin user?"
+msgstr ""
+
+#: installer/core/password_page.py:48 installer/core/upgrade_page.py:62
+#: setup/core/security_page.py:65 setup/core/status_page.py:241
+msgid "Password:"
+msgstr ""
+
+#: installer/core/password_page.py:50 installer/core/upgrade_page.py:64
+msgid "Confirm Password:"
+msgstr ""
+
+#: installer/core/password_page.py:58
+msgid "Install"
+msgstr ""
+
+#: installer/core/progress_page.py:40
+msgid "Installation Progress"
+msgstr ""
+
+#: installer/core/progress_page.py:52
+msgid "Installing"
+msgstr ""
+
+#: installer/core/progress_page.py:60
+msgid "Reboot"
+msgstr ""
+
+#: installer/core/progress_page.py:193
+msgid "Writing configuration file"
+msgstr ""
+
+#: installer/core/progress_page.py:221
+msgid "Partitioning and Creating File Systems on '%s'"
+msgstr ""
+
+#: installer/core/progress_page.py:238
+msgid "Setting Admin Password"
+msgstr ""
+
+#: installer/core/progress_page.py:255
+msgid "Installing Image and Bootloader "
+msgstr ""
+
+#: installer/core/progress_page.py:256
+msgid "Configuration to '%s'"
+msgstr ""
+
+#: installer/core/progress_page.py:258
+msgid "Updating Image and Bootloader"
+msgstr ""
+
+#: installer/core/progress_page.py:269
+msgid "Setting keyboard layout to '%s'"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:32
+msgid "Storage Sizes"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:61
+msgid "Storage Volumes"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:62
+msgid "Please enter the sizes for the "
+msgstr ""
+
+#: installer/core/storage_vol_page.py:63
+msgid "following partitions in MB"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:65
+msgid "UEFI/Bios:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:67
+msgid "Root & RootBackup:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:69
+msgid "(2 partitions at 512MB each)"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:71
+msgid "Swap:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:72
+msgid "Config:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:73
+msgid "Logging:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:74
+msgid "Data:"
+msgstr ""
+
+#: installer/core/storage_vol_page.py:80
+msgid "Next"
+msgstr ""
+
+#: installer/core/upgrade_page.py:39
+msgid "Upgrade Password"
+msgstr ""
+
+#: installer/core/upgrade_page.py:53
+msgid "Please enter the current admin "
+msgstr ""
+
+#: installer/core/upgrade_page.py:54
+msgid "password. You may also change the admin password "
+msgstr ""
+
+#: installer/core/upgrade_page.py:55
+msgid "if required. If the new password fields are left"
+msgstr ""
+
+#: installer/core/upgrade_page.py:56
+msgid "blank the password will remain the same."
+msgstr ""
+
+#: installer/core/upgrade_page.py:57 setup/core/security_page.py:64
+msgid "Password for the admin user"
+msgstr ""
+
+#: installer/core/upgrade_page.py:60
+msgid "Current Password:"
+msgstr ""
+
+#: installer/core/upgrade_page.py:73
+msgid "Update"
+msgstr ""
+
+#: installer/core/welcome_page.py:43
+msgid "Welcome"
+msgstr ""
+
+#: installer/core/welcome_page.py:55
+msgid "Installation"
+msgstr ""
+
+#: installer/core/welcome_page.py:84
+msgid "Install (dry)"
+msgstr ""
+
+#: installer/core/welcome_page.py:85
+msgid "Upgrade (dry)"
+msgstr ""
+
+#: installer/core/welcome_page.py:86
+msgid "Downgrade (dry)"
+msgstr ""
+
+#: installer/core/welcome_page.py:87
+msgid "Reinstall (dry)"
+msgstr ""
+
+#: installer/core/welcome_page.py:95
+msgid "Major version upgrades are unsupported, "
+msgstr ""
+
+#: installer/core/welcome_page.py:96
+msgid "uninstall existing version first"
+msgstr ""
+
+#: installer/core/welcome_page.py:103
+msgid "Upgrade %s to %s"
+msgstr ""
+
+#: installer/core/welcome_page.py:106
+msgid "Downgrade %s to %s"
+msgstr ""
+
+#: installer/core/welcome_page.py:109
+msgid "Reinstall %s"
+msgstr ""
+
+#: installer/core/welcome_page.py:114
+msgid "Invalid installation, please reboot from "
+msgstr ""
+
+#: installer/core/welcome_page.py:115
+msgid "media and choose Reinstall"
+msgstr ""
+
+#: installer/core/welcome_page.py:117
+msgid "Install Hypervisor %s"
+msgstr ""
+
+#: installer/core/welcome_page.py:121
+msgid "Info: %s"
+msgstr ""
+
+#: installer/core/welcome_page.py:125
+msgid "Info: Machine is booted in EFI mode"
+msgstr ""
+
+#: installer/core/welcome_page.py:127
+msgid "Info: DRY MODE"
+msgstr ""
+
+#: setup/core/diagnostics_page.py:33
+msgid "Diagnostics"
+msgstr ""
+
+#: setup/core/diagnostics_page.py:51
+msgid "Diagnostic Utilities"
+msgstr ""
+
+#: setup/core/diagnostics_page.py:52
+msgid "Select one of the tools below."
+msgstr ""
+
+#: setup/core/diagnostics_page.py:54
+msgid "Available diagnostics"
+msgstr ""
+
+#: setup/core/diagnostics_page.py:79
+msgid "Command Output"
+msgstr ""
+
+#: setup/core/kdump_page.py:42
+msgid "Kdump"
+msgstr ""
+
+#: setup/core/kdump_page.py:89
+msgid "Configure Kdump"
+msgstr ""
+
+#: setup/core/kdump_page.py:93
+msgid "network.notice"
+msgstr ""
+
+#: setup/core/kdump_page.py:94 setup/core/logging_page.py:78
+msgid "Networking is not configured, "
+msgstr ""
+
+#: setup/core/kdump_page.py:95
+msgid "please configure it before NFS "
+msgstr ""
+
+#: setup/core/kdump_page.py:96
+msgid "or SSH-based kdump"
+msgstr ""
+
+#: setup/core/kdump_page.py:98 setup/core/kdump_page.py:102
+msgid "Type"
+msgstr ""
+
+#: setup/core/kdump_page.py:104
+msgid "NFS Location "
+msgstr ""
+
+#: setup/core/kdump_page.py:105
+msgid "(example.com:/var/crash):"
+msgstr ""
+
+#: setup/core/kdump_page.py:108
+msgid "SSH Location "
+msgstr ""
+
+#: setup/core/kdump_page.py:109
+msgid "(root at example.com):"
+msgstr ""
+
+#: setup/core/kdump_page.py:147
+msgid "Updating kdump related configuration"
+msgstr ""
+
+#: setup/core/kdump_page.py:172
+msgid "An error occurred"
+msgstr ""
+
+#: setup/core/keyboard_page.py:56
+msgid "Choose the Keyboard Layout you would "
+msgstr ""
+
+#: setup/core/keyboard_page.py:57 setup/core/performance_page.py:55
+msgid "like to apply to this system."
+msgstr ""
+
+#: setup/core/keyboard_page.py:59
+msgid "Current Active "
+msgstr ""
+
+#: setup/core/keyboard_page.py:60
+msgid "Keyboard Layout: "
+msgstr ""
+
+#: setup/core/keyboard_page.py:84
+msgid "Updating keyboard related configuration"
+msgstr ""
+
+#: setup/core/logging_page.py:34 setup/core/logging_page.py:68
+msgid "Logging"
+msgstr ""
+
+#: setup/core/logging_page.py:69
+msgid "Logrotate Max Log "
+msgstr ""
+
+#: setup/core/logging_page.py:70
+msgid "Size (KB):"
+msgstr ""
+
+#: setup/core/logging_page.py:79
+msgid "please configure it before rsyslog "
+msgstr ""
+
+#: setup/core/logging_page.py:80
+msgid "and/or netconsole"
+msgstr ""
+
+#: setup/core/logging_page.py:83
+msgid "RSyslog is an enhanced multi-"
+msgstr ""
+
+#: setup/core/logging_page.py:84
+msgid "threaded syslogd"
+msgstr ""
+
+#: setup/core/logging_page.py:85 setup/core/logging_page.py:93
+#: setup/core/monitoring_page.py:58
+msgid "Server Address:"
+msgstr ""
+
+#: setup/core/logging_page.py:87 setup/core/logging_page.py:95
+#: setup/core/monitoring_page.py:59
+msgid "Server Port:"
+msgstr ""
+
+#: setup/core/logging_page.py:91
+msgid "Netconsole service allows a remote sys"
+msgstr ""
+
+#: setup/core/logging_page.py:92
+msgid "log daemon to record printk() messages"
+msgstr ""
+
+#: setup/core/logging_page.py:115
+msgid "Updating logging related configuration"
+msgstr ""
+
+#: setup/core/monitoring_page.py:34
+msgid "Monitoring"
+msgstr ""
+
+#: setup/core/monitoring_page.py:53
+msgid "Monitoring Configuration"
+msgstr ""
+
+#: setup/core/monitoring_page.py:54
+msgid "Collectd gathers statistics "
+msgstr ""
+
+#: setup/core/monitoring_page.py:55
+msgid "about the system and can be used to find "
+msgstr ""
+
+#: setup/core/monitoring_page.py:56
+msgid "performance bottlenecks and predict future "
+msgstr ""
+
+#: setup/core/monitoring_page.py:57
+msgid "system load."
+msgstr ""
+
+#: setup/core/monitoring_page.py:79
+msgid "Updating monitoring configuration"
+msgstr ""
+
+#: setup/core/network_page.py:93
+msgid "Network"
+msgstr ""
+
+#: setup/core/network_page.py:164
+msgid "Remove %s (%s)"
+msgstr ""
+
+#: setup/core/network_page.py:165 setup/core/network_page.py:571
+msgid "Create Bond"
+msgstr ""
+
+#: setup/core/network_page.py:167
+msgid "System Identification"
+msgstr ""
+
+#: setup/core/network_page.py:168
+msgid "Hostname:"
+msgstr ""
+
+#: setup/core/network_page.py:170
+msgid "DNS Server 1:"
+msgstr ""
+
+#: setup/core/network_page.py:171
+msgid "DNS Server 2:"
+msgstr ""
+
+#: setup/core/network_page.py:173
+msgid "NTP Server 1:"
+msgstr ""
+
+#: setup/core/network_page.py:174
+msgid "NTP Server 2:"
+msgstr ""
+
+#: setup/core/network_page.py:179 setup/core/ping.py:74
+msgid "Ping"
+msgstr ""
+
+#: setup/core/network_page.py:250
+msgid "Network Interface Configuration"
+msgstr ""
+
+#: setup/core/network_page.py:486
+msgid "Driver: "
+msgstr ""
+
+#: setup/core/network_page.py:487
+msgid "Vendor: "
+msgstr ""
+
+#: setup/core/network_page.py:499
+msgid "IPv4 Settings"
+msgstr ""
+
+#: setup/core/network_page.py:502 setup/core/network_page.py:522
+msgid "Disabled"
+msgstr ""
+
+#: setup/core/network_page.py:503 setup/core/network_page.py:524
+msgid "DHCP"
+msgstr ""
+
+#: setup/core/network_page.py:504 setup/core/network_page.py:525
+msgid "Static"
+msgstr ""
+
+#: setup/core/network_page.py:509 setup/core/network_page.py:530
+msgid "IP Address: "
+msgstr ""
+
+#: setup/core/network_page.py:511
+msgid " Netmask: "
+msgstr ""
+
+#: setup/core/network_page.py:514 setup/core/network_page.py:535
+msgid "Gateway: "
+msgstr ""
+
+#: setup/core/network_page.py:519
+msgid "IPv6 Settings"
+msgstr ""
+
+#: setup/core/network_page.py:523
+msgid "Auto"
+msgstr ""
+
+#: setup/core/network_page.py:532
+msgid " Prefix Length: "
+msgstr ""
+
+#: setup/core/network_page.py:542
+msgid "VLAN ID: "
+msgstr ""
+
+#: setup/core/network_page.py:548
+msgid "Use Bridge: "
+msgstr ""
+
+#: setup/core/network_page.py:551
+msgid "Flash Lights to Identify"
+msgstr ""
+
+#: setup/core/network_page.py:557 ui/__init__.py:817 ui/__init__.py:827
+#: ui/__init__.py:842 ui/__init__.py:859
+msgid "Close"
+msgstr ""
+
+#: setup/core/network_page.py:566 setup/core/plugins_page.py:56
+msgid "Name:"
+msgstr ""
+
+#: setup/core/network_page.py:568
+msgid "Options:"
+msgstr ""
+
+#: setup/core/performance_page.py:34
+msgid "Performance"
+msgstr ""
+
+#: setup/core/performance_page.py:53
+msgid "tuned Configuration"
+msgstr ""
+
+#: setup/core/performance_page.py:54
+msgid "Choose the tuned profile you would "
+msgstr ""
+
+#: setup/core/performance_page.py:57
+msgid "Current Active Profile: "
+msgstr ""
+
+#: setup/core/performance_page.py:58
+msgid "Available tuned Profiles"
+msgstr ""
+
+#: setup/core/ping.py:35
+msgid "Networking/Ping"
+msgstr ""
+
+#: setup/core/ping.py:70
+msgid "Ping a remote host"
+msgstr ""
+
+#: setup/core/ping.py:71
+msgid "Address:"
+msgstr ""
+
+#: setup/core/ping.py:72
+msgid "Count:"
+msgstr ""
+
+#: setup/core/ping.py:76
+msgid "Result:"
+msgstr ""
+
+#: setup/core/plugins_page.py:40 setup/core/plugins_page.py:74
+msgid "Plugins"
+msgstr ""
+
+#: setup/core/plugins_page.py:49
+msgid "Installed Plugins"
+msgstr ""
+
+#: setup/core/plugins_page.py:51
+msgid "Installed plugins:"
+msgstr ""
+
+#: setup/core/plugins_page.py:59
+msgid "Version:"
+msgstr ""
+
+#: setup/core/plugins_page.py:62
+msgid "Date installed:"
+msgstr ""
+
+#: setup/core/plugins_page.py:67
+msgid "RPM Diff"
+msgstr ""
+
+#: setup/core/plugins_page.py:69
+msgid "SRPM Diff"
+msgstr ""
+
+#: setup/core/plugins_page.py:71
+msgid "File Diff"
+msgstr ""
+
+#: setup/core/plugins_page.py:76
+msgid "There are no plugins currently installed"
+msgstr ""
+
+#: setup/core/remote_storage_page.py:35 setup/core/remote_storage_page.py:55
+msgid "Remote Storage"
+msgstr ""
+
+#: setup/core/remote_storage_page.py:56
+msgid "iSCSI Initiator Name:"
+msgstr ""
+
+#: setup/core/remote_storage_page.py:59
+msgid "NFSv4 Domain (example.redhat.com):"
+msgstr ""
+
+#: setup/core/remote_storage_page.py:79
+msgid "Updating remote storage configuration"
+msgstr ""
+
+#: setup/core/security_page.py:34
+msgid "Security"
+msgstr ""
+
+#: setup/core/security_page.py:59
+msgid "Remote Access"
+msgstr ""
+
+#: setup/core/security_page.py:60
+msgid "Enable SSH password authentication"
+msgstr ""
+
+#: setup/core/security_page.py:61
+msgid "Strong Random Number Generator"
+msgstr ""
+
+#: setup/core/security_page.py:62
+msgid "Disable AES-NI"
+msgstr ""
+
+#: setup/core/security_page.py:63
+msgid "Bytes Used:"
+msgstr ""
+
+#: setup/core/security_page.py:98
+msgid "Updating security configuration"
+msgstr ""
+
+#: setup/core/security_page.py:112
+msgid "Setting admin password"
+msgstr ""
+
+#: setup/core/status_page.py:43
+msgid "Status"
+msgstr ""
+
+#: setup/core/status_page.py:78
+msgid "Networking: "
+msgstr ""
+
+#: setup/core/status_page.py:82
+msgid "Lock"
+msgstr ""
+
+#: setup/core/status_page.py:83
+msgid "Log Off"
+msgstr ""
+
+#: setup/core/status_page.py:84
+msgid "Restart"
+msgstr ""
+
+#: setup/core/status_page.py:85
+msgid "Power Off"
+msgstr ""
+
+#: setup/core/status_page.py:88
+msgid "System Information"
+msgstr ""
+
+#: setup/core/status_page.py:90
+msgid "Status: "
+msgstr ""
+
+#: setup/core/status_page.py:96
+msgid "Logs: "
+msgstr ""
+
+#: setup/core/status_page.py:100
+msgid "Running VMs: "
+msgstr ""
+
+#: setup/core/status_page.py:103
+msgid "Press F8 for support menu"
+msgstr ""
+
+#: setup/core/status_page.py:107
+msgid "View Host Key"
+msgstr ""
+
+#: setup/core/status_page.py:109
+msgid "View CPU Details"
+msgstr ""
+
+#: setup/core/status_page.py:142
+msgid "The provided password was incorrect."
+msgstr ""
+
+#: setup/core/status_page.py:152
+msgid "Confirm System Restart"
+msgstr ""
+
+#: setup/core/status_page.py:154
+msgid ""
+"\n"
+"This will restart the system,"
+msgstr ""
+
+#: setup/core/status_page.py:155 setup/core/status_page.py:167
+msgid "proceed?"
+msgstr ""
+
+#: setup/core/status_page.py:164
+msgid "Confirm System Poweroff"
+msgstr ""
+
+#: setup/core/status_page.py:166
+msgid ""
+"\n"
+"This will shut down the system,"
+msgstr ""
+
+#: setup/core/status_page.py:175
+msgid "Host Key"
+msgstr ""
+
+#: setup/core/status_page.py:179
+msgid "CPU Details"
+msgstr ""
+
+#: setup/core/status_page.py:212
+msgid "RSA Host Key Fingerprint:"
+msgstr ""
+
+#: setup/core/status_page.py:218
+msgid "RSA Host Key:"
+msgstr ""
+
+#: setup/core/status_page.py:238
+msgid "Enter the admin password to unlock"
+msgstr ""
+
+#: setup/core/status_page.py:239
+msgid "Username: "
+msgstr ""
+
+#: setup/core/status_page.py:243
+msgid "Unlock"
+msgstr ""
+
+#: setup/core/support_page.py:38
+msgid "Support"
+msgstr ""
+
+#: setup/core/support_page.py:47
+msgid "Support Info"
+msgstr ""
+
+#: setup/core/support_page.py:48
+msgid "Select one of the logfiles below."
+msgstr ""
+
+#: setup/core/support_page.py:50
+msgid "Available Logfiles"
+msgstr ""
+
+#: setup/core/support_page.py:84
+msgid "Logfile"
+msgstr ""
+
+#: ui/__init__.py:780 ui/__init__.py:800
+msgid "Reset"
+msgstr ""
+
+#: ui/__init__.py:825
+msgid "Contents"
+msgstr ""
+
+#: ui/__init__.py:841
+msgid "OK"
+msgstr ""
+
+#: ui/__init__.py:851
+msgid "Transaction: %s"
+msgstr ""
+
diff --git a/src/ovirt/node/locale/ovirt_node_cn.po b/src/ovirt/node/locale/ovirt_node_cn.po
new file mode 100644
index 0000000..0e04930
--- /dev/null
+++ b/src/ovirt/node/locale/ovirt_node_cn.po
@@ -0,0 +1,910 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR ORGANIZATION
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2013-08-19 16:04+CST\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+"Generated-By: pygettext.py 1.5\n"
+
+
+#: installer/core/boot_device_page.py:38
+msgid "Boot Device"
+msgstr "启动设备"
+
+#: installer/core/boot_device_page.py:59
+msgid "Please select the disk to use for booting %s"
+msgstr "请选择用于引导 %s 的磁盘"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Device Name"
+msgstr "设备名称"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Location"
+msgstr "位置"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Size"
+msgstr "容量"
+
+#: installer/core/boot_device_page.py:70
+#: installer/core/installation_device_page.py:73
+msgid "(No device)"
+msgstr "(No device)"
+
+#: installer/core/boot_device_page.py:74
+msgid "No Valid Boot Devices Detected"
+msgstr "未发现可用的引导设备"
+
+#: installer/core/boot_device_page.py:77
+#: installer/core/installation_device_page.py:80
+#: installer/core/keyboard_page.py:57 installer/core/password_page.py:56
+#: installer/core/storage_vol_page.py:78 installer/core/upgrade_page.py:71
+#: installer/core/welcome_page.py:61
+msgid "Quit"
+msgstr "退出 "
+
+#: installer/core/boot_device_page.py:78
+#: installer/core/installation_device_page.py:81
+#: installer/core/keyboard_page.py:58 installer/core/password_page.py:57
+#: installer/core/storage_vol_page.py:79 installer/core/upgrade_page.py:72
+msgid "Back"
+msgstr "返回 "
+
+#: installer/core/boot_device_page.py:79
+#: installer/core/installation_device_page.py:82
+#: installer/core/keyboard_page.py:59
+msgid "Continue"
+msgstr "继续 "
+
+#: installer/core/boot_device_page.py:180
+msgid "Device"
+msgstr "设备"
+
+#: installer/core/boot_device_page.py:181
+msgid "Model"
+msgstr "型号"
+
+#: installer/core/boot_device_page.py:182
+msgid "Bus Type"
+msgstr "总线类型"
+
+#: installer/core/boot_device_page.py:183
+msgid "Serial"
+msgstr "串行"
+
+#: installer/core/boot_device_page.py:184
+msgid "Size (GB)"
+msgstr "容量(GB)"
+
+#: installer/core/boot_device_page.py:185
+msgid "Description"
+msgstr "描述"
+
+#: installer/core/boot_device_page.py:189
+msgid "Disk Details\n"
+msgstr "磁盘详细\n"
+
+#: installer/core/boot_device_page.py:204
+msgid "Custom Block Device"
+msgstr "可用块设备"
+
+#: installer/core/boot_device_page.py:206
+msgid "Device path:"
+msgstr "设备路径:"
+
+#: installer/core/boot_device_page.py:211 setup/core/network_page.py:556
+#: ui/__init__.py:779 ui/__init__.py:799
+msgid "Save"
+msgstr "保存 "
+
+#: installer/core/boot_device_page.py:212
+msgid "Cancel"
+msgstr "取消 "
+
+#: installer/core/installation_device_page.py:39
+msgid "Data Device"
+msgstr "数据设备"
+
+#: installer/core/installation_device_page.py:60
+msgid "Please select the disk(s) to use for installation of %s"
+msgstr "请选择磁盘用来安装%s"
+
+#: installer/core/installation_device_page.py:77
+msgid "No Valid Install Devices Detected"
+msgstr "未发现可用的安装设备"
+
+#: installer/core/keyboard_page.py:35 setup/core/keyboard_page.py:34
+msgid "Keyboard"
+msgstr "键盘"
+
+#: installer/core/keyboard_page.py:50 setup/core/keyboard_page.py:55
+msgid "Keyboard Layout Selection"
+msgstr "键盘类型选择"
+
+#: installer/core/keyboard_page.py:51 setup/core/keyboard_page.py:61
+msgid "Available Keyboard Layouts"
+msgstr "可用键盘类型"
+
+#: installer/core/keyboard_page.py:53
+msgid "(Hit Enter to select a layout)"
+msgstr "(点击Enter选择键盘类型)"
+
+#: installer/core/password_page.py:33
+msgid "Console Password"
+msgstr "控制台密码"
+
+#: installer/core/password_page.py:46 installer/core/upgrade_page.py:52
+msgid "Require a password for the admin user?"
+msgstr "是否设置admin用户密码?"
+
+#: installer/core/password_page.py:48 installer/core/upgrade_page.py:62
+#: setup/core/security_page.py:65 setup/core/status_page.py:241
+msgid "Password:"
+msgstr "密码:"
+
+#: installer/core/password_page.py:50 installer/core/upgrade_page.py:64
+msgid "Confirm Password:"
+msgstr "确认密码:"
+
+#: installer/core/password_page.py:58
+msgid "Install"
+msgstr "安装 "
+
+#: installer/core/progress_page.py:40
+msgid "Installation Progress"
+msgstr "安装过程"
+
+#: installer/core/progress_page.py:52
+msgid "Installing"
+msgstr "正在安装 "
+
+#: installer/core/progress_page.py:60
+msgid "Reboot"
+msgstr "重启 "
+
+#: installer/core/progress_page.py:193
+msgid "Writing configuration file"
+msgstr "写配置文件"
+
+#: installer/core/progress_page.py:221
+msgid "Partitioning and Creating File Systems on '%s'"
+msgstr "在'%s'上分区并创建文件系统"
+
+#: installer/core/progress_page.py:238
+msgid "Setting Admin Password"
+msgstr "设置Admin密码"
+
+#: installer/core/progress_page.py:255
+msgid "Installing Image and Bootloader "
+msgstr "安装Image和Bootloader"
+
+#: installer/core/progress_page.py:256
+msgid "Configuration to '%s'"
+msgstr "配置'%s'"
+
+#: installer/core/progress_page.py:258
+msgid "Updating Image and Bootloader"
+msgstr "更新Image和Bootloader"
+
+#: installer/core/progress_page.py:269
+msgid "Setting keyboard layout to '%s'"
+msgstr "设置键盘布局为'%s'"
+
+#: installer/core/storage_vol_page.py:32
+msgid "Storage Sizes"
+msgstr "存储容量"
+
+#: installer/core/storage_vol_page.py:61
+msgid "Storage Volumes"
+msgstr "存储容量"
+
+#: installer/core/storage_vol_page.py:62
+msgid "Please enter the sizes for the "
+msgstr "请输入分区容量(MB)"
+
+#: installer/core/storage_vol_page.py:63
+msgid "following partitions in MB"
+msgstr " "
+
+#: installer/core/storage_vol_page.py:65
+msgid "UEFI/Bios:"
+msgstr "UEFI/Bios:"
+
+#: installer/core/storage_vol_page.py:67
+msgid "Root & RootBackup:"
+msgstr "Root & RootBackup:"
+
+#: installer/core/storage_vol_page.py:69
+msgid "(2 partitions at 512MB each)"
+msgstr "(两个分区各512MB)"
+
+#: installer/core/storage_vol_page.py:71
+msgid "Swap:"
+msgstr "Swap:"
+
+#: installer/core/storage_vol_page.py:72
+msgid "Config:"
+msgstr "Config:"
+
+#: installer/core/storage_vol_page.py:73
+msgid "Logging:"
+msgstr "Logging:"
+
+#: installer/core/storage_vol_page.py:74
+msgid "Data:"
+msgstr "Data:"
+
+#: installer/core/storage_vol_page.py:80
+msgid "Next"
+msgstr "下一步 "
+
+#: installer/core/upgrade_page.py:39
+msgid "Upgrade Password"
+msgstr "更新密码"
+
+#: installer/core/upgrade_page.py:53
+msgid "Please enter the current admin "
+msgstr "请输入当前admin的密码。如果需要你也可以修改admin的密码。如果不输入的话,将使用原密码。"
+
+#: installer/core/upgrade_page.py:54
+msgid "password. You may also change the admin password "
+msgstr " "
+
+#: installer/core/upgrade_page.py:55
+msgid "if required. If the new password fields are left"
+msgstr " "
+
+#: installer/core/upgrade_page.py:56
+msgid "blank the password will remain the same."
+msgstr " "
+
+#: installer/core/upgrade_page.py:57 setup/core/security_page.py:64
+msgid "Password for the admin user"
+msgstr "admin用户的密码"
+
+#: installer/core/upgrade_page.py:60
+msgid "Current Password:"
+msgstr "当前密码:"
+
+#: installer/core/upgrade_page.py:73
+msgid "Update"
+msgstr "更新 "
+
+#: installer/core/welcome_page.py:43
+msgid "Welcome"
+msgstr "欢迎"
+
+#: installer/core/welcome_page.py:55
+msgid "Installation"
+msgstr "安装 "
+
+#: installer/core/welcome_page.py:84
+msgid "Install (dry)"
+msgstr "安装(dry) "
+
+#: installer/core/welcome_page.py:85
+msgid "Upgrade (dry)"
+msgstr "更新(dry) "
+
+#: installer/core/welcome_page.py:86
+msgid "Downgrade (dry)"
+msgstr "降级(dry) "
+
+#: installer/core/welcome_page.py:87
+msgid "Reinstall (dry)"
+msgstr "重装(dry) "
+
+#: installer/core/welcome_page.py:95
+msgid "Major version upgrades are unsupported, "
+msgstr "主版本不支持升级,请先删除现有系统"
+
+#: installer/core/welcome_page.py:96
+msgid "uninstall existing version first"
+msgstr " "
+
+#: installer/core/welcome_page.py:103
+msgid "Upgrade %s to %s"
+msgstr "更新 %s 到 %s"
+
+#: installer/core/welcome_page.py:106
+msgid "Downgrade %s to %s"
+msgstr "降级 %s 到 %s"
+
+#: installer/core/welcome_page.py:109
+msgid "Reinstall %s"
+msgstr "重装 %s"
+
+#: installer/core/welcome_page.py:114
+msgid "Invalid installation, please reboot from "
+msgstr "无效的安装,请重启并重新安装"
+
+#: installer/core/welcome_page.py:115
+msgid "media and choose Reinstall"
+msgstr " "
+
+#: installer/core/welcome_page.py:117
+msgid "Install Hypervisor %s"
+msgstr "安装Hypervisor %s"
+
+#: installer/core/welcome_page.py:121
+msgid "Info: %s"
+msgstr "信息: %s"
+
+#: installer/core/welcome_page.py:125
+msgid "Info: Machine is booted in EFI mode"
+msgstr "信息: 服务器使用EFI模式引导"
+
+#: installer/core/welcome_page.py:127
+msgid "Info: DRY MODE"
+msgstr "信息: DRY MODE"
+
+#: setup/core/diagnostics_page.py:33
+msgid "Diagnostics"
+msgstr "诊断"
+
+#: setup/core/diagnostics_page.py:51
+msgid "Diagnostic Utilities"
+msgstr "诊断工具"
+
+#: setup/core/diagnostics_page.py:52
+msgid "Select one of the tools below."
+msgstr "请选择如下工具之一"
+
+#: setup/core/diagnostics_page.py:54
+msgid "Available diagnostics"
+msgstr "可用诊断"
+
+#: setup/core/diagnostics_page.py:79
+msgid "Command Output"
+msgstr "命令输出"
+
+#: setup/core/kdump_page.py:42
+msgid "Kdump"
+msgstr "Kdump"
+
+#: setup/core/kdump_page.py:89
+msgid "Configure Kdump"
+msgstr "配置Kdump"
+
+#: setup/core/kdump_page.py:93
+msgid "network.notice"
+msgstr "network.notice"
+
+#: setup/core/kdump_page.py:94 setup/core/logging_page.py:78
+msgid "Networking is not configured, "
+msgstr "网络未配置,"
+
+#: setup/core/kdump_page.py:95
+msgid "please configure it before NFS "
+msgstr "请在配置NFS和基于SSH的Kdump前配置网络"
+
+#: setup/core/kdump_page.py:96
+msgid "or SSH-based kdump"
+msgstr " "
+
+#: setup/core/kdump_page.py:98 setup/core/kdump_page.py:102
+msgid "Type"
+msgstr "类型"
+
+#: setup/core/kdump_page.py:104
+msgid "NFS Location "
+msgstr "NFS位置"
+
+#: setup/core/kdump_page.py:105
+msgid "(example.com:/var/crash):"
+msgstr "(example.com:/var/crash):"
+
+#: setup/core/kdump_page.py:108
+msgid "SSH Location "
+msgstr "SSH 位置"
+
+#: setup/core/kdump_page.py:109
+msgid "(root at example.com):"
+msgstr "(root at example.com):"
+
+#: setup/core/kdump_page.py:147
+msgid "Updating kdump related configuration"
+msgstr "更新kdump相关配置"
+
+#: setup/core/kdump_page.py:172
+msgid "An error occurred"
+msgstr "发生一个错误"
+
+#: setup/core/keyboard_page.py:56
+msgid "Choose the Keyboard Layout you would "
+msgstr "请选择系统的键盘布局"
+
+#: setup/core/keyboard_page.py:57 setup/core/performance_page.py:55
+msgid "like to apply to this system."
+msgstr " "
+
+#: setup/core/keyboard_page.py:59
+msgid "Current Active "
+msgstr "当前设置键盘布局:"
+
+#: setup/core/keyboard_page.py:60
+msgid "Keyboard Layout: "
+msgstr " "
+
+#: setup/core/keyboard_page.py:84
+msgid "Updating keyboard related configuration"
+msgstr "更新键盘相关配置"
+
+#: setup/core/logging_page.py:34 setup/core/logging_page.py:68
+msgid "Logging"
+msgstr "日志"
+
+#: setup/core/logging_page.py:69
+msgid "Logrotate Max Log "
+msgstr "循环日志最大"
+
+#: setup/core/logging_page.py:70
+msgid "Size (KB):"
+msgstr "容量(KB)"
+
+#: setup/core/logging_page.py:79
+msgid "please configure it before rsyslog "
+msgstr "请在配置rsyslog、netconsole前配置"
+
+#: setup/core/logging_page.py:80
+msgid "and/or netconsole"
+msgstr " "
+
+#: setup/core/logging_page.py:83
+msgid "RSyslog is an enhanced multi-"
+msgstr "RSyslog是加强的多线程syslogd"
+
+#: setup/core/logging_page.py:84
+msgid "threaded syslogd"
+msgstr " "
+
+#: setup/core/logging_page.py:85 setup/core/logging_page.py:93
+#: setup/core/monitoring_page.py:58
+msgid "Server Address:"
+msgstr "服务器地址:"
+
+#: setup/core/logging_page.py:87 setup/core/logging_page.py:95
+#: setup/core/monitoring_page.py:59
+msgid "Server Port:"
+msgstr "服务器端口:"
+
+#: setup/core/logging_page.py:91
+msgid "Netconsole service allows a remote sys"
+msgstr "Netconsole服务提供了记录printk()信息的远端syslog服务"
+
+#: setup/core/logging_page.py:92
+msgid "log daemon to record printk() messages"
+msgstr " "
+
+#: setup/core/logging_page.py:115
+msgid "Updating logging related configuration"
+msgstr "更新日志相关配置"
+
+#: setup/core/monitoring_page.py:34
+msgid "Monitoring"
+msgstr "监视"
+
+#: setup/core/monitoring_page.py:53
+msgid "Monitoring Configuration"
+msgstr "监视相关配置"
+
+#: setup/core/monitoring_page.py:54
+msgid "Collectd gathers statistics "
+msgstr "Collectd用于收集系统信息从而发现性能瓶颈并预测未来系统负荷"
+
+#: setup/core/monitoring_page.py:55
+msgid "about the system and can be used to find "
+msgstr " "
+
+#: setup/core/monitoring_page.py:56
+msgid "performance bottlenecks and predict future "
+msgstr " "
+
+#: setup/core/monitoring_page.py:57
+msgid "system load."
+msgstr " "
+
+#: setup/core/monitoring_page.py:79
+msgid "Updating monitoring configuration"
+msgstr "更新监控配置"
+
+#: setup/core/network_page.py:93
+msgid "Network"
+msgstr "网络"
+
+#: setup/core/network_page.py:164
+msgid "Remove %s (%s)"
+msgstr "删除%s (%s)"
+
+#: setup/core/network_page.py:165 setup/core/network_page.py:571
+msgid "Create Bond"
+msgstr "创建Bond "
+
+#: setup/core/network_page.py:167
+msgid "System Identification"
+msgstr "系统识别"
+
+#: setup/core/network_page.py:168
+msgid "Hostname:"
+msgstr "主机名:"
+
+#: setup/core/network_page.py:170
+msgid "DNS Server 1:"
+msgstr "DNS服务1:"
+
+#: setup/core/network_page.py:171
+msgid "DNS Server 2:"
+msgstr "DNS服务2:"
+
+#: setup/core/network_page.py:173
+msgid "NTP Server 1:"
+msgstr "NTP服务1:"
+
+#: setup/core/network_page.py:174
+msgid "NTP Server 2:"
+msgstr "NTP服务2:"
+
+#: setup/core/network_page.py:179 setup/core/ping.py:74
+msgid "Ping"
+msgstr "Ping"
+
+#: setup/core/network_page.py:250
+msgid "Network Interface Configuration"
+msgstr "网络接口配置"
+
+#: setup/core/network_page.py:486
+msgid "Driver: "
+msgstr "驱动:"
+
+#: setup/core/network_page.py:487
+msgid "Vendor: "
+msgstr "厂商:"
+
+#: setup/core/network_page.py:499
+msgid "IPv4 Settings"
+msgstr "IPv4 设置"
+
+#: setup/core/network_page.py:502 setup/core/network_page.py:522
+msgid "Disabled"
+msgstr "停用"
+
+#: setup/core/network_page.py:503 setup/core/network_page.py:524
+msgid "DHCP"
+msgstr "DHCP"
+
+#: setup/core/network_page.py:504 setup/core/network_page.py:525
+msgid "Static"
+msgstr "静态"
+
+#: setup/core/network_page.py:509 setup/core/network_page.py:530
+msgid "IP Address: "
+msgstr "IP地址:"
+
+#: setup/core/network_page.py:511
+msgid " Netmask: "
+msgstr " 子网掩码:"
+
+#: setup/core/network_page.py:514 setup/core/network_page.py:535
+msgid "Gateway: "
+msgstr "网关:"
+
+#: setup/core/network_page.py:519
+msgid "IPv6 Settings"
+msgstr "IPv6 设置"
+
+#: setup/core/network_page.py:523
+msgid "Auto"
+msgstr "自动"
+
+#: setup/core/network_page.py:532
+msgid " Prefix Length: "
+msgstr " 前缀长度:"
+
+#: setup/core/network_page.py:542
+msgid "VLAN ID: "
+msgstr "VLAN ID"
+
+#: setup/core/network_page.py:548
+msgid "Use Bridge: "
+msgstr "使用桥:"
+
+#: setup/core/network_page.py:551
+msgid "Flash Lights to Identify"
+msgstr "闪灯确认 "
+
+#: setup/core/network_page.py:557 ui/__init__.py:817 ui/__init__.py:827
+#: ui/__init__.py:842 ui/__init__.py:859
+msgid "Close"
+msgstr "关闭 "
+
+#: setup/core/network_page.py:566 setup/core/plugins_page.py:56
+msgid "Name:"
+msgstr "名称:"
+
+#: setup/core/network_page.py:568
+msgid "Options:"
+msgstr "选项:"
+
+#: setup/core/performance_page.py:34
+msgid "Performance"
+msgstr "性能"
+
+#: setup/core/performance_page.py:53
+msgid "tuned Configuration"
+msgstr "调优配置"
+
+#: setup/core/performance_page.py:54
+msgid "Choose the tuned profile you would "
+msgstr "选择要使用的调优文件"
+
+#: setup/core/performance_page.py:57
+msgid "Current Active Profile: "
+msgstr "当前使用的文件:"
+
+#: setup/core/performance_page.py:58
+msgid "Available tuned Profiles"
+msgstr "可用调优文件"
+
+#: setup/core/ping.py:35
+msgid "Networking/Ping"
+msgstr "网络/Ping"
+
+#: setup/core/ping.py:70
+msgid "Ping a remote host"
+msgstr "Ping远端主机"
+
+#: setup/core/ping.py:71
+msgid "Address:"
+msgstr "地址:"
+
+#: setup/core/ping.py:72
+msgid "Count:"
+msgstr "计数:"
+
+#: setup/core/ping.py:76
+msgid "Result:"
+msgstr "结果:"
+
+#: setup/core/plugins_page.py:40 setup/core/plugins_page.py:74
+msgid "Plugins"
+msgstr "插件"
+
+#: setup/core/plugins_page.py:49
+msgid "Installed Plugins"
+msgstr "安装插件"
+
+#: setup/core/plugins_page.py:51
+msgid "Installed plugins:"
+msgstr "安装插件:"
+
+#: setup/core/plugins_page.py:59
+msgid "Version:"
+msgstr "版本:"
+
+#: setup/core/plugins_page.py:62
+msgid "Date installed:"
+msgstr "安装日期:"
+
+#: setup/core/plugins_page.py:67
+msgid "RPM Diff"
+msgstr "RPM Diff"
+
+#: setup/core/plugins_page.py:69
+msgid "SRPM Diff"
+msgstr "SRPM Diff"
+
+#: setup/core/plugins_page.py:71
+msgid "File Diff"
+msgstr "File Diff"
+
+#: setup/core/plugins_page.py:76
+msgid "There are no plugins currently installed"
+msgstr "未安装任何插件"
+
+#: setup/core/remote_storage_page.py:35 setup/core/remote_storage_page.py:55
+msgid "Remote Storage"
+msgstr "远端存储"
+
+#: setup/core/remote_storage_page.py:56
+msgid "iSCSI Initiator Name:"
+msgstr "iSCSI启动器名称:"
+
+#: setup/core/remote_storage_page.py:59
+msgid "NFSv4 Domain (example.redhat.com):"
+msgstr "NFSv4 Domain (example.redhat.com):"
+
+#: setup/core/remote_storage_page.py:79
+msgid "Updating remote storage configuration"
+msgstr "更新远端存储配置"
+
+#: setup/core/security_page.py:34
+msgid "Security"
+msgstr "安全"
+
+#: setup/core/security_page.py:59
+msgid "Remote Access"
+msgstr "远端接入"
+
+#: setup/core/security_page.py:60
+msgid "Enable SSH password authentication"
+msgstr "启用SSH密码认证"
+
+#: setup/core/security_page.py:61
+msgid "Strong Random Number Generator"
+msgstr "强随机数生成器"
+
+#: setup/core/security_page.py:62
+msgid "Disable AES-NI"
+msgstr "停用AES-NI"
+
+#: setup/core/security_page.py:63
+msgid "Bytes Used:"
+msgstr "使用字节数:"
+
+#: setup/core/security_page.py:98
+msgid "Updating security configuration"
+msgstr "更新安全配置"
+
+#: setup/core/security_page.py:112
+msgid "Setting admin password"
+msgstr "设置admin密码"
+
+#: setup/core/status_page.py:43
+msgid "Status"
+msgstr "状态"
+
+#: setup/core/status_page.py:78
+msgid "Networking: "
+msgstr "网络:"
+
+#: setup/core/status_page.py:82
+msgid "Lock"
+msgstr "锁定 "
+
+#: setup/core/status_page.py:83
+msgid "Log Off"
+msgstr "登出 "
+
+#: setup/core/status_page.py:84
+msgid "Restart"
+msgstr "重启 "
+
+#: setup/core/status_page.py:85
+msgid "Power Off"
+msgstr "关闭 "
+
+#: setup/core/status_page.py:88
+msgid "System Information"
+msgstr "系统信息"
+
+#: setup/core/status_page.py:90
+msgid "Status: "
+msgstr "状态:"
+
+#: setup/core/status_page.py:96
+msgid "Logs: "
+msgstr "日志:"
+
+#: setup/core/status_page.py:100
+msgid "Running VMs: "
+msgstr "运行的虚拟机:"
+
+#: setup/core/status_page.py:103
+msgid "Press F8 for support menu"
+msgstr "按F8寻求帮助"
+
+#: setup/core/status_page.py:107
+msgid "View Host Key"
+msgstr "查看Host Key "
+
+#: setup/core/status_page.py:109
+msgid "View CPU Details"
+msgstr "查看CPU详细 "
+
+#: setup/core/status_page.py:142
+msgid "The provided password was incorrect."
+msgstr "所提供的密码不正确"
+
+#: setup/core/status_page.py:152
+msgid "Confirm System Restart"
+msgstr "确认系统重启"
+
+#: setup/core/status_page.py:154
+msgid "\nThis will restart the system,"
+msgstr "\n该操作将重启系统,"
+
+#: setup/core/status_page.py:155 setup/core/status_page.py:167
+msgid "proceed?"
+msgstr "是否确定?"
+
+#: setup/core/status_page.py:126
+msgid "There are %s Virtual Machines running."
+msgstr "%s个虚拟机正在运行。"
+
+#: setup/core/status_page.py:164
+msgid "Confirm System Poweroff"
+msgstr "确认关闭系统"
+
+#: setup/core/status_page.py:166
+msgid "\nThis will shut down the system,"
+msgstr "\n该操作将关闭系统,"
+
+#: setup/core/status_page.py:175
+msgid "Host Key"
+msgstr "Host Key"
+
+#: setup/core/status_page.py:179
+msgid "CPU Details"
+msgstr "CPU详细"
+
+#: setup/core/status_page.py:212
+msgid "RSA Host Key Fingerprint:"
+msgstr "RSA Host Key指纹:"
+
+#: setup/core/status_page.py:218
+msgid "RSA Host Key:"
+msgstr "RSA Host Key:"
+
+#: setup/core/status_page.py:238
+msgid "Enter the admin password to unlock"
+msgstr "输入admin密码解锁"
+
+#: setup/core/status_page.py:239
+msgid "Username: "
+msgstr "用户名:"
+
+#: setup/core/status_page.py:243
+msgid "Unlock"
+msgstr "解锁 "
+
+#: setup/core/support_page.py:38
+msgid "Support"
+msgstr "支持"
+
+#: setup/core/support_page.py:47
+msgid "Support Info"
+msgstr "支持信息"
+
+#: setup/core/support_page.py:48
+msgid "Select one of the logfiles below."
+msgstr "选择下列日志文件之一。"
+
+#: setup/core/support_page.py:50
+msgid "Available Logfiles"
+msgstr "可用日志文件"
+
+#: setup/core/support_page.py:84
+msgid "Logfile"
+msgstr "日志文件"
+
+#: ui/__init__.py:780 ui/__init__.py:800
+msgid "Reset"
+msgstr "重置 "
+
+#: ui/__init__.py:825
+msgid "Contents"
+msgstr "内容"
+
+#: ui/__init__.py:841
+msgid "OK"
+msgstr "确定 "
+
+#: ui/__init__.py:851
+msgid "Transaction: %s"
+msgstr "事务:%s"
+
+#: setup/core/status_page.py:130
+msgid "This screen is locked."
+msgstr "该屏幕已经被锁定"
diff --git a/src/ovirt/node/locale/ovirt_node_en.po b/src/ovirt/node/locale/ovirt_node_en.po
new file mode 100644
index 0000000..f4e6ce0
--- /dev/null
+++ b/src/ovirt/node/locale/ovirt_node_en.po
@@ -0,0 +1,906 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR ORGANIZATION
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2013-08-19 16:04+CST\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: ENCODING\n"
+"Generated-By: pygettext.py 1.5\n"
+
+
+#: installer/core/boot_device_page.py:38
+msgid "Boot Device"
+msgstr "Boot Device"
+
+#: installer/core/boot_device_page.py:59
+msgid "Please select the disk to use for booting %s"
+msgstr "Please select the disk to use for booting %s"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Device Name"
+msgstr "Device Name"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Location"
+msgstr "Location"
+
+#: installer/core/boot_device_page.py:69
+#: installer/core/installation_device_page.py:70
+msgid "Size"
+msgstr "Size"
+
+#: installer/core/boot_device_page.py:70
+#: installer/core/installation_device_page.py:73
+msgid "(No device)"
+msgstr "(No device)"
+
+#: installer/core/boot_device_page.py:74
+msgid "No Valid Boot Devices Detected"
+msgstr "No Valid Boot Devices Detected"
+
+#: installer/core/boot_device_page.py:77
+#: installer/core/installation_device_page.py:80
+#: installer/core/keyboard_page.py:57 installer/core/password_page.py:56
+#: installer/core/storage_vol_page.py:78 installer/core/upgrade_page.py:71
+#: installer/core/welcome_page.py:61
+msgid "Quit"
+msgstr "Quit"
+
+#: installer/core/boot_device_page.py:78
+#: installer/core/installation_device_page.py:81
+#: installer/core/keyboard_page.py:58 installer/core/password_page.py:57
+#: installer/core/storage_vol_page.py:79 installer/core/upgrade_page.py:72
+msgid "Back"
+msgstr "Back"
+
+#: installer/core/boot_device_page.py:79
+#: installer/core/installation_device_page.py:82
+#: installer/core/keyboard_page.py:59
+msgid "Continue"
+msgstr "Continue"
+
+#: installer/core/boot_device_page.py:180
+msgid "Device"
+msgstr "Device"
+
+#: installer/core/boot_device_page.py:181
+msgid "Model"
+msgstr "Model"
+
+#: installer/core/boot_device_page.py:182
+msgid "Bus Type"
+msgstr "Bus Type"
+
+#: installer/core/boot_device_page.py:183
+msgid "Serial"
+msgstr "Serial"
+
+#: installer/core/boot_device_page.py:184
+msgid "Size (GB)"
+msgstr "Size (GB)"
+
+#: installer/core/boot_device_page.py:185
+msgid "Description"
+msgstr "Description"
+
+#: installer/core/boot_device_page.py:189
+msgid "Disk Details\n"
+msgstr "Disk Details\n"
+
+#: installer/core/boot_device_page.py:204
+msgid "Custom Block Device"
+msgstr "Custom Block Device"
+
+#: installer/core/boot_device_page.py:206
+msgid "Device path:"
+msgstr "Device path:"
+
+#: installer/core/boot_device_page.py:211 setup/core/network_page.py:556
+#: ui/__init__.py:779 ui/__init__.py:799
+msgid "Save"
+msgstr "Save"
+
+#: installer/core/boot_device_page.py:212
+msgid "Cancel"
+msgstr "Cancel"
+
+#: installer/core/installation_device_page.py:39
+msgid "Data Device"
+msgstr "Data Device"
+
+#: installer/core/installation_device_page.py:60
+msgid "Please select the disk(s) to use for installation of %s"
+msgstr "Please select the disk(s) to use for installation of %s"
+
+#: installer/core/installation_device_page.py:77
+msgid "No Valid Install Devices Detected"
+msgstr "No Valid Install Devices Detected"
+
+#: installer/core/keyboard_page.py:35 setup/core/keyboard_page.py:34
+msgid "Keyboard"
+msgstr "Keyboard"
+
+#: installer/core/keyboard_page.py:50 setup/core/keyboard_page.py:55
+msgid "Keyboard Layout Selection"
+msgstr "Keyboard Layout Selection"
+
+#: installer/core/keyboard_page.py:51 setup/core/keyboard_page.py:61
+msgid "Available Keyboard Layouts"
+msgstr "Available Keyboard Layouts"
+
+#: installer/core/keyboard_page.py:53
+msgid "(Hit Enter to select a layout)"
+msgstr "(Hit Enter to select a layout)"
+
+#: installer/core/password_page.py:33
+msgid "Console Password"
+msgstr "Console Password"
+
+#: installer/core/password_page.py:46 installer/core/upgrade_page.py:52
+msgid "Require a password for the admin user?"
+msgstr "Require a password for the admin user?"
+
+#: installer/core/password_page.py:48 installer/core/upgrade_page.py:62
+#: setup/core/security_page.py:65 setup/core/status_page.py:241
+msgid "Password:"
+msgstr "Password:"
+
+#: installer/core/password_page.py:50 installer/core/upgrade_page.py:64
+msgid "Confirm Password:"
+msgstr "Confirm Password:"
+
+#: installer/core/password_page.py:58
+msgid "Install"
+msgstr "Install"
+
+#: installer/core/progress_page.py:40
+msgid "Installation Progress"
+msgstr "Installation Progress"
+
+#: installer/core/progress_page.py:52
+msgid "Installing"
+msgstr "Installing"
+
+#: installer/core/progress_page.py:60
+msgid "Reboot"
+msgstr "Reboot"
+
+#: installer/core/progress_page.py:193
+msgid "Writing configuration file"
+msgstr "Writing configuration file"
+
+#: installer/core/progress_page.py:221
+msgid "Partitioning and Creating File Systems on '%s'"
+msgstr "Partitioning and Creating File Systems on '%s'"
+
+#: installer/core/progress_page.py:238
+msgid "Setting Admin Password"
+msgstr "Setting Admin Password"
+
+#: installer/core/progress_page.py:255
+msgid "Installing Image and Bootloader "
+msgstr "Installing Image and Bootloader "
+
+#: installer/core/progress_page.py:256
+msgid "Configuration to '%s'"
+msgstr "Configuration to '%s'"
+
+#: installer/core/progress_page.py:258
+msgid "Updating Image and Bootloader"
+msgstr "Updating Image and Bootloader"
+
+#: installer/core/progress_page.py:269
+msgid "Setting keyboard layout to '%s'"
+msgstr "Setting keyboard layout to '%s'"
+
+#: installer/core/storage_vol_page.py:32
+msgid "Storage Sizes"
+msgstr "Storage Sizes"
+
+#: installer/core/storage_vol_page.py:61
+msgid "Storage Volumes"
+msgstr "Storage Volumes"
+
+#: installer/core/storage_vol_page.py:62
+msgid "Please enter the sizes for the "
+msgstr "Please enter the sizes for the "
+
+#: installer/core/storage_vol_page.py:63
+msgid "following partitions in MB"
+msgstr "following partitions in MB"
+
+#: installer/core/storage_vol_page.py:65
+msgid "UEFI/Bios:"
+msgstr "UEFI/Bios:"
+
+#: installer/core/storage_vol_page.py:67
+msgid "Root & RootBackup:"
+msgstr "Root & RootBackup:"
+
+#: installer/core/storage_vol_page.py:69
+msgid "(2 partitions at 512MB each)"
+msgstr "(2 partitions at 512MB each)"
+
+#: installer/core/storage_vol_page.py:71
+msgid "Swap:"
+msgstr "Swap:"
+
+#: installer/core/storage_vol_page.py:72
+msgid "Config:"
+msgstr "Config:"
+
+#: installer/core/storage_vol_page.py:73
+msgid "Logging:"
+msgstr "Logging:"
+
+#: installer/core/storage_vol_page.py:74
+msgid "Data:"
+msgstr "Data:"
+
+#: installer/core/storage_vol_page.py:80
+msgid "Next"
+msgstr "Next"
+
+#: installer/core/upgrade_page.py:39
+msgid "Upgrade Password"
+msgstr "Upgrade Password"
+
+#: installer/core/upgrade_page.py:53
+msgid "Please enter the current admin "
+msgstr "Please enter the current admin "
+
+#: installer/core/upgrade_page.py:54
+msgid "password. You may also change the admin password "
+msgstr "password. You may also change the admin password "
+
+#: installer/core/upgrade_page.py:55
+msgid "if required. If the new password fields are left"
+msgstr "if required. If the new password fields are left"
+
+#: installer/core/upgrade_page.py:56
+msgid "blank the password will remain the same."
+msgstr "blank the password will remain the same."
+
+#: installer/core/upgrade_page.py:57 setup/core/security_page.py:64
+msgid "Password for the admin user"
+msgstr "Password for the admin user"
+
+#: installer/core/upgrade_page.py:60
+msgid "Current Password:"
+msgstr "Current Password:"
+
+#: installer/core/upgrade_page.py:73
+msgid "Update"
+msgstr "Update"
+
+#: installer/core/welcome_page.py:43
+msgid "Welcome"
+msgstr "Welcome"
+
+#: installer/core/welcome_page.py:55
+msgid "Installation"
+msgstr "Installation"
+
+#: installer/core/welcome_page.py:84
+msgid "Install (dry)"
+msgstr "Install (dry)"
+
+#: installer/core/welcome_page.py:85
+msgid "Upgrade (dry)"
+msgstr "Upgrade (dry)"
+
+#: installer/core/welcome_page.py:86
+msgid "Downgrade (dry)"
+msgstr "Downgrade (dry)"
+
+#: installer/core/welcome_page.py:87
+msgid "Reinstall (dry)"
+msgstr "Reinstall (dry)"
+
+#: installer/core/welcome_page.py:95
+msgid "Major version upgrades are unsupported, "
+msgstr "Major version upgrades are unsupported, "
+
+#: installer/core/welcome_page.py:96
+msgid "uninstall existing version first"
+msgstr "uninstall existing version first"
+
+#: installer/core/welcome_page.py:103
+msgid "Upgrade %s to %s"
+msgstr "Upgrade %s to %s"
+
+#: installer/core/welcome_page.py:106
+msgid "Downgrade %s to %s"
+msgstr "Downgrade %s to %s"
+
+#: installer/core/welcome_page.py:109
+msgid "Reinstall %s"
+msgstr "Reinstall %s"
+
+#: installer/core/welcome_page.py:114
+msgid "Invalid installation, please reboot from "
+msgstr "Invalid installation, please reboot from "
+
+#: installer/core/welcome_page.py:115
+msgid "media and choose Reinstall"
+msgstr "media and choose Reinstall"
+
+#: installer/core/welcome_page.py:117
+msgid "Install Hypervisor %s"
+msgstr "Install Hypervisor %s"
+
+#: installer/core/welcome_page.py:121
+msgid "Info: %s"
+msgstr "Info: %s"
+
+#: installer/core/welcome_page.py:125
+msgid "Info: Machine is booted in EFI mode"
+msgstr "Info: Machine is booted in EFI mode"
+
+#: installer/core/welcome_page.py:127
+msgid "Info: DRY MODE"
+msgstr "Info: DRY MODE"
+
+#: setup/core/diagnostics_page.py:33
+msgid "Diagnostics"
+msgstr "Diagnostics"
+
+#: setup/core/diagnostics_page.py:51
+msgid "Diagnostic Utilities"
+msgstr "Diagnostic Utilities"
+
+#: setup/core/diagnostics_page.py:52
+msgid "Select one of the tools below."
+msgstr "Select one of the tools below."
+
+#: setup/core/diagnostics_page.py:54
+msgid "Available diagnostics"
+msgstr "Available diagnostics"
+
+#: setup/core/diagnostics_page.py:79
+msgid "Command Output"
+msgstr "Command Output"
+
+#: setup/core/kdump_page.py:42
+msgid "Kdump"
+msgstr "Kdump"
+
+#: setup/core/kdump_page.py:89
+msgid "Configure Kdump"
+msgstr "Configure Kdump"
+
+#: setup/core/kdump_page.py:93
+msgid "network.notice"
+msgstr "network.notice"
+
+#: setup/core/kdump_page.py:94 setup/core/logging_page.py:78
+msgid "Networking is not configured, "
+msgstr "Networking is not configured, "
+
+#: setup/core/kdump_page.py:95
+msgid "please configure it before NFS "
+msgstr "please configure it before NFS "
+
+#: setup/core/kdump_page.py:96
+msgid "or SSH-based kdump"
+msgstr "or SSH-based kdump"
+
+#: setup/core/kdump_page.py:98 setup/core/kdump_page.py:102
+msgid "Type"
+msgstr "Type"
+
+#: setup/core/kdump_page.py:104
+msgid "NFS Location "
+msgstr "NFS Location "
+
+#: setup/core/kdump_page.py:105
+msgid "(example.com:/var/crash):"
+msgstr "(example.com:/var/crash):"
+
+#: setup/core/kdump_page.py:108
+msgid "SSH Location "
+msgstr "SSH Location "
+
+#: setup/core/kdump_page.py:109
+msgid "(root at example.com):"
+msgstr "(root at example.com):"
+
+#: setup/core/kdump_page.py:147
+msgid "Updating kdump related configuration"
+msgstr "Updating kdump related configuration"
+
+#: setup/core/kdump_page.py:172
+msgid "An error occurred"
+msgstr "An error occurred"
+
+#: setup/core/keyboard_page.py:56
+msgid "Choose the Keyboard Layout you would "
+msgstr "Choose the Keyboard Layout you would "
+
+#: setup/core/keyboard_page.py:57 setup/core/performance_page.py:55
+msgid "like to apply to this system."
+msgstr "like to apply to this system."
+
+#: setup/core/keyboard_page.py:59
+msgid "Current Active "
+msgstr "Current Active "
+
+#: setup/core/keyboard_page.py:60
+msgid "Keyboard Layout: "
+msgstr "Keyboard Layout: "
+
+#: setup/core/keyboard_page.py:84
+msgid "Updating keyboard related configuration"
+msgstr "Updating keyboard related configuration"
+
+#: setup/core/logging_page.py:34 setup/core/logging_page.py:68
+msgid "Logging"
+msgstr "Logging"
+
+#: setup/core/logging_page.py:69
+msgid "Logrotate Max Log "
+msgstr "Logrotate Max Log "
+
+#: setup/core/logging_page.py:70
+msgid "Size (KB):"
+msgstr "Size (KB):"
+
+#: setup/core/logging_page.py:79
+msgid "please configure it before rsyslog "
+msgstr "please configure it before rsyslog "
+
+#: setup/core/logging_page.py:80
+msgid "and/or netconsole"
+msgstr "and/or netconsole"
+
+#: setup/core/logging_page.py:83
+msgid "RSyslog is an enhanced multi-"
+msgstr "RSyslog is an enhanced multi-"
+
+#: setup/core/logging_page.py:84
+msgid "threaded syslogd"
+msgstr "threaded syslogd"
+
+#: setup/core/logging_page.py:85 setup/core/logging_page.py:93
+#: setup/core/monitoring_page.py:58
+msgid "Server Address:"
+msgstr "Server Address:"
+
+#: setup/core/logging_page.py:87 setup/core/logging_page.py:95
+#: setup/core/monitoring_page.py:59
+msgid "Server Port:"
+msgstr "Server Port:"
+
+#: setup/core/logging_page.py:91
+msgid "Netconsole service allows a remote sys"
+msgstr "Netconsole service allows a remote sys"
+
+#: setup/core/logging_page.py:92
+msgid "log daemon to record printk() messages"
+msgstr "log daemon to record printk() messages"
+
+#: setup/core/logging_page.py:115
+msgid "Updating logging related configuration"
+msgstr "Updating logging related configuration"
+
+#: setup/core/monitoring_page.py:34
+msgid "Monitoring"
+msgstr "Monitoring"
+
+#: setup/core/monitoring_page.py:53
+msgid "Monitoring Configuration"
+msgstr "Monitoring Configuration"
+
+#: setup/core/monitoring_page.py:54
+msgid "Collectd gathers statistics "
+msgstr "Collectd gathers statistics "
+
+#: setup/core/monitoring_page.py:55
+msgid "about the system and can be used to find "
+msgstr "about the system and can be used to find "
+
+#: setup/core/monitoring_page.py:56
+msgid "performance bottlenecks and predict future "
+msgstr "performance bottlenecks and predict future "
+
+#: setup/core/monitoring_page.py:57
+msgid "system load."
+msgstr "system load."
+
+#: setup/core/monitoring_page.py:79
+msgid "Updating monitoring configuration"
+msgstr "Updating monitoring configuration"
+
+#: setup/core/network_page.py:93
+msgid "Network"
+msgstr "Network"
+
+#: setup/core/network_page.py:164
+msgid "Remove %s (%s)"
+msgstr "Remove %s (%s)"
+
+#: setup/core/network_page.py:165 setup/core/network_page.py:571
+msgid "Create Bond"
+msgstr "Create Bond"
+
+#: setup/core/network_page.py:167
+msgid "System Identification"
+msgstr "System Identification"
+
+#: setup/core/network_page.py:168
+msgid "Hostname:"
+msgstr "Hostname:"
+
+#: setup/core/network_page.py:170
+msgid "DNS Server 1:"
+msgstr "DNS Server 1:"
+
+#: setup/core/network_page.py:171
+msgid "DNS Server 2:"
+msgstr "DNS Server 2:"
+
+#: setup/core/network_page.py:173
+msgid "NTP Server 1:"
+msgstr "NTP Server 1:"
+
+#: setup/core/network_page.py:174
+msgid "NTP Server 2:"
+msgstr "NTP Server 2:"
+
+#: setup/core/network_page.py:179 setup/core/ping.py:74
+msgid "Ping"
+msgstr "Ping"
+
+#: setup/core/network_page.py:250
+msgid "Network Interface Configuration"
+msgstr "Network Interface Configuration"
+
+#: setup/core/network_page.py:486
+msgid "Driver: "
+msgstr "Driver: "
+
+#: setup/core/network_page.py:487
+msgid "Vendor: "
+msgstr "Vendor: "
+
+#: setup/core/network_page.py:499
+msgid "IPv4 Settings"
+msgstr "IPv4 Settings"
+
+#: setup/core/network_page.py:502 setup/core/network_page.py:522
+msgid "Disabled"
+msgstr "Disabled"
+
+#: setup/core/network_page.py:503 setup/core/network_page.py:524
+msgid "DHCP"
+msgstr "DHCP"
+
+#: setup/core/network_page.py:504 setup/core/network_page.py:525
+msgid "Static"
+msgstr "Static"
+
+#: setup/core/network_page.py:509 setup/core/network_page.py:530
+msgid "IP Address: "
+msgstr "IP Address: "
+
+#: setup/core/network_page.py:511
+msgid " Netmask: "
+msgstr " Netmask: "
+
+#: setup/core/network_page.py:514 setup/core/network_page.py:535
+msgid "Gateway: "
+msgstr "Gateway: "
+
+#: setup/core/network_page.py:519
+msgid "IPv6 Settings"
+msgstr "IPv6 Settings"
+
+#: setup/core/network_page.py:523
+msgid "Auto"
+msgstr "Auto"
+
+#: setup/core/network_page.py:532
+msgid " Prefix Length: "
+msgstr " Prefix Length: "
+
+#: setup/core/network_page.py:542
+msgid "VLAN ID: "
+msgstr "VLAN ID: "
+
+#: setup/core/network_page.py:548
+msgid "Use Bridge: "
+msgstr "Use Bridge: "
+
+#: setup/core/network_page.py:551
+msgid "Flash Lights to Identify"
+msgstr "Flash Lights to Identify"
+
+#: setup/core/network_page.py:557 ui/__init__.py:817 ui/__init__.py:827
+#: ui/__init__.py:842 ui/__init__.py:859
+msgid "Close"
+msgstr "Close"
+
+#: setup/core/network_page.py:566 setup/core/plugins_page.py:56
+msgid "Name:"
+msgstr "Name:"
+
+#: setup/core/network_page.py:568
+msgid "Options:"
+msgstr "Options:"
+
+#: setup/core/performance_page.py:34
+msgid "Performance"
+msgstr "Performance"
+
+#: setup/core/performance_page.py:53
+msgid "tuned Configuration"
+msgstr "tuned Configuration"
+
+#: setup/core/performance_page.py:54
+msgid "Choose the tuned profile you would "
+msgstr "Choose the tuned profile you would "
+
+#: setup/core/performance_page.py:57
+msgid "Current Active Profile: "
+msgstr "Current Active Profile: "
+
+#: setup/core/performance_page.py:58
+msgid "Available tuned Profiles"
+msgstr "Available tuned Profiles"
+
+#: setup/core/ping.py:35
+msgid "Networking/Ping"
+msgstr "Networking/Ping"
+
+#: setup/core/ping.py:70
+msgid "Ping a remote host"
+msgstr "Ping a remote host"
+
+#: setup/core/ping.py:71
+msgid "Address:"
+msgstr "Address:"
+
+#: setup/core/ping.py:72
+msgid "Count:"
+msgstr "Count:"
+
+#: setup/core/ping.py:76
+msgid "Result:"
+msgstr "Result:"
+
+#: setup/core/plugins_page.py:40 setup/core/plugins_page.py:74
+msgid "Plugins"
+msgstr "Plugins"
+
+#: setup/core/plugins_page.py:49
+msgid "Installed Plugins"
+msgstr "Installed Plugins"
+
+#: setup/core/plugins_page.py:51
+msgid "Installed plugins:"
+msgstr "Installed plugins:"
+
+#: setup/core/plugins_page.py:59
+msgid "Version:"
+msgstr "Version:"
+
+#: setup/core/plugins_page.py:62
+msgid "Date installed:"
+msgstr "Date installed:"
+
+#: setup/core/plugins_page.py:67
+msgid "RPM Diff"
+msgstr "RPM Diff"
+
+#: setup/core/plugins_page.py:69
+msgid "SRPM Diff"
+msgstr "SRPM Diff"
+
+#: setup/core/plugins_page.py:71
+msgid "File Diff"
+msgstr "File Diff"
+
+#: setup/core/plugins_page.py:76
+msgid "There are no plugins currently installed"
+msgstr "There are no plugins currently installed"
+
+#: setup/core/remote_storage_page.py:35 setup/core/remote_storage_page.py:55
+msgid "Remote Storage"
+msgstr "Remote Storage"
+
+#: setup/core/remote_storage_page.py:56
+msgid "iSCSI Initiator Name:"
+msgstr "iSCSI Initiator Name:"
+
+#: setup/core/remote_storage_page.py:59
+msgid "NFSv4 Domain (example.redhat.com):"
+msgstr "NFSv4 Domain (example.redhat.com):"
+
+#: setup/core/remote_storage_page.py:79
+msgid "Updating remote storage configuration"
+msgstr "Updating remote storage configuration"
+
+#: setup/core/security_page.py:34
+msgid "Security"
+msgstr "Security"
+
+#: setup/core/security_page.py:59
+msgid "Remote Access"
+msgstr "Remote Access"
+
+#: setup/core/security_page.py:60
+msgid "Enable SSH password authentication"
+msgstr "Enable SSH password authentication"
+
+#: setup/core/security_page.py:61
+msgid "Strong Random Number Generator"
+msgstr "Strong Random Number Generator"
+
+#: setup/core/security_page.py:62
+msgid "Disable AES-NI"
+msgstr "Disable AES-NI"
+
+#: setup/core/security_page.py:63
+msgid "Bytes Used:"
+msgstr "Bytes Used:"
+
+#: setup/core/security_page.py:98
+msgid "Updating security configuration"
+msgstr "Updating security configuration"
+
+#: setup/core/security_page.py:112
+msgid "Setting admin password"
+msgstr "Setting admin password"
+
+#: setup/core/status_page.py:43
+msgid "Status"
+msgstr "Status"
+
+#: setup/core/status_page.py:78
+msgid "Networking: "
+msgstr "Networking: "
+
+#: setup/core/status_page.py:82
+msgid "Lock"
+msgstr "Lock"
+
+#: setup/core/status_page.py:83
+msgid "Log Off"
+msgstr "Log Off"
+
+#: setup/core/status_page.py:84
+msgid "Restart"
+msgstr "Restart"
+
+#: setup/core/status_page.py:85
+msgid "Power Off"
+msgstr "Power Off"
+
+#: setup/core/status_page.py:88
+msgid "System Information"
+msgstr "System Information"
+
+#: setup/core/status_page.py:90
+msgid "Status: "
+msgstr "Status: "
+
+#: setup/core/status_page.py:96
+msgid "Logs: "
+msgstr "Logs: "
+
+#: setup/core/status_page.py:100
+msgid "Running VMs: "
+msgstr "Running VMs: "
+
+#: setup/core/status_page.py:103
+msgid "Press F8 for support menu"
+msgstr "Press F8 for support menu"
+
+#: setup/core/status_page.py:107
+msgid "View Host Key"
+msgstr "View Host Key"
+
+#: setup/core/status_page.py:109
+msgid "View CPU Details"
+msgstr "View CPU Details"
+
+#: setup/core/status_page.py:142
+msgid "The provided password was incorrect."
+msgstr "The provided password was incorrect."
+
+#: setup/core/status_page.py:152
+msgid "Confirm System Restart"
+msgstr "Confirm System Restart"
+
+#: setup/core/status_page.py:154
+msgid "This will restart the system,"
+msgstr "This will restart the system,"
+
+#: setup/core/status_page.py:155 setup/core/status_page.py:167
+msgid "proceed?"
+msgstr "proceed?"
+
+#: setup/core/status_page.py:164
+msgid "Confirm System Poweroff"
+msgstr "Confirm System Poweroff"
+
+#: setup/core/status_page.py:166
+msgid "This will shut down the system,"
+msgstr "This will shut down the system,"
+
+#: setup/core/status_page.py:175
+msgid "Host Key"
+msgstr "Host Key"
+
+#: setup/core/status_page.py:179
+msgid "CPU Details"
+msgstr "CPU Details"
+
+#: setup/core/status_page.py:212
+msgid "RSA Host Key Fingerprint:"
+msgstr "RSA Host Key Fingerprint:"
+
+#: setup/core/status_page.py:218
+msgid "RSA Host Key:"
+msgstr "RSA Host Key:"
+
+#: setup/core/status_page.py:238
+msgid "Enter the admin password to unlock"
+msgstr "Enter the admin password to unlock"
+
+#: setup/core/status_page.py:239
+msgid "Username: "
+msgstr "Username: "
+
+#: setup/core/status_page.py:243
+msgid "Unlock"
+msgstr "Unlock"
+
+#: setup/core/support_page.py:38
+msgid "Support"
+msgstr "Support"
+
+#: setup/core/support_page.py:47
+msgid "Support Info"
+msgstr "Support Info"
+
+#: setup/core/support_page.py:48
+msgid "Select one of the logfiles below."
+msgstr "Select one of the logfiles below."
+
+#: setup/core/support_page.py:50
+msgid "Available Logfiles"
+msgstr "Available Logfiles"
+
+#: setup/core/support_page.py:84
+msgid "Logfile"
+msgstr "Logfile"
+
+#: ui/__init__.py:780 ui/__init__.py:800
+msgid "Reset"
+msgstr "Reset"
+
+#: ui/__init__.py:825
+msgid "Contents"
+msgstr "Contents"
+
+#: ui/__init__.py:841
+msgid "OK"
+msgstr "OK"
+
+#: ui/__init__.py:851
+msgid "Transaction: %s"
+msgstr "Transaction: %s"
+
+#: setup/core/status_page.py:130
+msgid "This screen is locked."
+msgstr ""
diff --git a/src/ovirt/node/locale/zh_CN/LC_MESSAGES/ovirt_node.mo b/src/ovirt/node/locale/zh_CN/LC_MESSAGES/ovirt_node.mo
new file mode 100644
index 0000000..f39d405
--- /dev/null
+++ b/src/ovirt/node/locale/zh_CN/LC_MESSAGES/ovirt_node.mo
Binary files differ
diff --git a/src/ovirt/node/setup/__main__.py b/src/ovirt/node/setup/__main__.py
index 59eff4f..0088378 100644
--- a/src/ovirt/node/setup/__main__.py
+++ b/src/ovirt/node/setup/__main__.py
@@ -24,8 +24,10 @@
"""
from ovirt.node import app, setup
-
+import gettext
if __name__ == '__main__':
+ gettext.install('ovirt_node', '/usr/share/locale', unicode=True)
+
app = app.Application(setup)
app.run()
diff --git a/src/ovirt/node/setup/core/diagnostics_page.py b/src/ovirt/node/setup/core/diagnostics_page.py
index a3508ef..eb34923 100644
--- a/src/ovirt/node/setup/core/diagnostics_page.py
+++ b/src/ovirt/node/setup/core/diagnostics_page.py
@@ -30,7 +30,7 @@
class Plugin(plugins.NodePlugin):
def name(self):
- return "Diagnostics"
+ return _("Diagnostics")
def rank(self):
return 95
@@ -48,10 +48,10 @@
"""Describes the UI this plugin requires
This is an ordered list of (path, widget) tuples.
"""
- ws = [ui.Header("diagnostic._header", "Diagnostic Utilities"),
- ui.Label("diagnostic.info", "Select one of the tools below."),
+ ws = [ui.Header("diagnostic._header", _("Diagnostic Utilities")),
+ ui.Label("diagnostic.info", _("Select one of the tools below.")),
ui.Divider("diagnostic.divider"),
- ui.Table("diagnostic.tools", "", "Available diagnostics",
+ ui.Table("diagnostic.tools", "", _("Available diagnostics"),
self.__diagnostics(), height=min(
len(self.__diagnostics()), 4)),
]
@@ -76,8 +76,8 @@
contents = process.check_output(cmd,
stderr=process.STDOUT,
shell=True)
- return ui.TextViewDialog("output.dialog", "Command Output",
- contents)
+ return ui.TextViewDialog("output.dialog", _("Command Output").encode('utf8'),
+ contents.encode('utf8'))
def __diagnostics(self):
return [("multipath", "multipath -ll"),
diff --git a/src/ovirt/node/setup/core/kdump_page.py b/src/ovirt/node/setup/core/kdump_page.py
index 5887cd4..1e2d0ab 100644
--- a/src/ovirt/node/setup/core/kdump_page.py
+++ b/src/ovirt/node/setup/core/kdump_page.py
@@ -39,7 +39,7 @@
_types = []
def name(self):
- return "Kdump"
+ return _("Kdump")
def rank(self):
return 60
@@ -86,27 +86,27 @@
else:
net_is_configured = NodeNetwork().is_configured()
- ws = [ui.Header("kdump._header", "Configure Kdump")]
+ ws = [ui.Header("kdump._header", _("Configure Kdump"))]
if not net_is_configured:
self._types = self._types_local
- ws.extend([ui.Notice("network.notice",
- "Networking is not configured, " +
- "please configure it before NFS " +
- "or SSH-based kdump"),
+ ws.extend([ui.Notice(_("network.notice"),
+ _("Networking is not configured, ") +
+ _("please configure it before NFS ") +
+ _("or SSH-based kdump")),
ui.Divider("notice.divider")])
- ws.extend([ui.Options("kdump.type", "Type", self._types)])
+ ws.extend([ui.Options("kdump.type", _("Type"), self._types)])
else:
self._types = self._types_local + self._types_remote
- ws.extend([ui.Options("kdump.type", "Type", self._types)])
+ ws.extend([ui.Options("kdump.type", _("Type"), self._types)])
ws.extend([ui.Divider("divider[0]"),
- ui.Entry("kdump.nfs_location", "NFS Location " +
- "(example.com:/var/crash):",
+ ui.Entry("kdump.nfs_location", _("NFS Location ") +
+ _("(example.com:/var/crash):"),
align_vertical=True),
ui.Divider("divider[1]"),
- ui.Entry("kdump.ssh_location", "SSH Location " +
- "(root at example.com):",
+ ui.Entry("kdump.ssh_location", _("SSH Location ") +
+ _("(root at example.com):"),
align_vertical=True),
])
page = ui.Page("page", ws)
@@ -144,7 +144,7 @@
kdump_keys = ["kdump.type", "kdump.ssh_location", "kdump.nfs_location"]
- txs = utils.Transaction("Updating kdump related configuration")
+ txs = utils.Transaction(_("Updating kdump related configuration"))
if changes.contains_any(kdump_keys):
model = defaults.KDump()
@@ -169,4 +169,4 @@
console.wait_for_keypress()
except Exception as e:
self.logger.exception("Exception while configuring kdump")
- return InfoDialog("dialog.info", "An error occurred", e.message)
+ return InfoDialog("dialog.info", _("An error occurred"), e.message)
diff --git a/src/ovirt/node/setup/core/keyboard_page.py b/src/ovirt/node/setup/core/keyboard_page.py
index 22e8ba9..bf36818 100644
--- a/src/ovirt/node/setup/core/keyboard_page.py
+++ b/src/ovirt/node/setup/core/keyboard_page.py
@@ -31,7 +31,7 @@
_model = None
def name(self):
- return "Keyboard"
+ return _("Keyboard")
def rank(self):
return 30
@@ -52,18 +52,18 @@
This is an ordered list of (path, widget) tuples.
"""
kbd = utils.system.Keyboard()
- ws = [ui.Header("header", "Keyboard Layout Selection"),
- ui.Label("label", "Choose the Keyboard Layout you would " +
- "like to apply to this system."),
+ ws = [ui.Header("header", _("Keyboard Layout Selection")),
+ ui.Label("label", _("Choose the Keyboard Layout you would ") +
+ _("like to apply to this system.")),
ui.Divider("divider[0]"),
- ui.KeywordLabel("keyboard.layout_name", "Current Active " +
- "Keyboard Layout: "),
- ui.Table("keyboard.layout", "", "Available Keyboard Layouts",
+ ui.KeywordLabel("keyboard.layout_name", _("Current Active ").encode('utf8') +
+ _("Keyboard Layout: ").encode('utf8')),
+ ui.Table("keyboard.layout", "", _("Available Keyboard Layouts"),
kbd.available_layouts(), kbd.get_current()),
]
page = ui.Page("page", ws)
- page.buttons = [ui.SaveButton("page.save")]
+ page.buttons = [ui.SaveButton("page.save", _("Save"))]
self.widgets.add(page)
return page
@@ -81,7 +81,7 @@
layout_keys = ["keyboard.layout"]
- txs = utils.Transaction("Updating keyboard related configuration")
+ txs = utils.Transaction(_("Updating keyboard related configuration"))
if changes.contains_any(layout_keys):
model = defaults.Keyboard()
diff --git a/src/ovirt/node/setup/core/logging_page.py b/src/ovirt/node/setup/core/logging_page.py
index 270cd18..53033e5 100644
--- a/src/ovirt/node/setup/core/logging_page.py
+++ b/src/ovirt/node/setup/core/logging_page.py
@@ -31,7 +31,7 @@
_model = None
def name(self):
- return "Logging"
+ return _("Logging")
def rank(self):
return 50
@@ -65,9 +65,9 @@
def ui_content(self):
- ws = [ui.Header("header[0]", "Logging"),
- ui.Entry("logrotate.max_size", "Logrotate Max Log " +
- "Size (KB):"),
+ ws = [ui.Header("header[0]", _("Logging")),
+ ui.Entry("logrotate.max_size", _("Logrotate Max Log ") +
+ _("Size (KB):")),
ui.Divider("divider[0]")
]
@@ -75,24 +75,24 @@
if not net_is_configured:
ws.extend([ui.Notice("network.notice",
- "Networking is not configured, " +
- "please configure it before rsyslog " +
- "and/or netconsole"),
+ _("Networking is not configured, ") +
+ _("please configure it before rsyslog ") +
+ _("and/or netconsole")),
ui.Divider("notice.divider")])
- ws.extend([ui.Label("rsyslog.header", "RSyslog is an enhanced multi-" +
- "threaded syslogd"),
- ui.Entry("rsyslog.address", "Server Address:",
+ ws.extend([ui.Label("rsyslog.header", _("RSyslog is an enhanced multi-") +
+ _("threaded syslogd")),
+ ui.Entry("rsyslog.address", _("Server Address:"),
enabled=net_is_configured),
- ui.Entry("rsyslog.port", "Server Port:",
+ ui.Entry("rsyslog.port", _("Server Port:"),
enabled=net_is_configured),
ui.Divider("divider[1]"),
ui.Label("netconsole.label",
- "Netconsole service allows a remote sys" +
- "log daemon to record printk() messages"),
- ui.Entry("netconsole.address", "Server Address:",
+ _("Netconsole service allows a remote sys") +
+ _("log daemon to record printk() messages")),
+ ui.Entry("netconsole.address", _("Server Address:"),
enabled=net_is_configured),
- ui.Entry("netconsole.port", "Server Port:",
+ ui.Entry("netconsole.port", _("Server Port:"),
enabled=net_is_configured)
])
@@ -112,7 +112,7 @@
self.logger.debug("Changes: %s" % changes)
self.logger.debug("Effective Model: %s" % effective_model)
- txs = utils.Transaction("Updating logging related configuration")
+ txs = utils.Transaction(_("Updating logging related configuration"))
# If any logrotate key changed ...
logrotate_keys = ["logrotate.max_size"]
diff --git a/src/ovirt/node/setup/core/monitoring_page.py b/src/ovirt/node/setup/core/monitoring_page.py
index 0912af0..30fa1af 100644
--- a/src/ovirt/node/setup/core/monitoring_page.py
+++ b/src/ovirt/node/setup/core/monitoring_page.py
@@ -31,7 +31,7 @@
_model = None
def name(self):
- return "Monitoring"
+ return _("Monitoring")
def rank(self):
return 90
@@ -50,13 +50,13 @@
}
def ui_content(self):
- ws = [ui.Header("header[0]", "Monitoring Configuration"),
- ui.Label("label", "Collectd gathers statistics " +
- "about the system and can be used to find " +
- "performance bottlenecks and predict future " +
- "system load."),
- ui.Entry("collectd.address", "Server Address:"),
- ui.Entry("collectd.port", "Server Port:"),
+ ws = [ui.Header("header[0]", _("Monitoring Configuration")),
+ ui.Label("label", _("Collectd gathers statistics ") +
+ _("about the system and can be used to find ") +
+ _("performance bottlenecks and predict future ") +
+ _("system load.")),
+ ui.Entry("collectd.address", _("Server Address:")),
+ ui.Entry("collectd.port", _("Server Port:")),
]
page = ui.Page("page", ws)
self.widgets.add(page)
@@ -76,7 +76,7 @@
collectd_keys = ["collectd.address", "collectd.port"]
- txs = utils.Transaction("Updating monitoring configuration")
+ txs = utils.Transaction(_("Updating monitoring configuration"))
if changes.contains_any(collectd_keys):
model = defaults.Collectd()
diff --git a/src/ovirt/node/setup/core/network_page.py b/src/ovirt/node/setup/core/network_page.py
index 98f3e2a..eda2da3 100644
--- a/src/ovirt/node/setup/core/network_page.py
+++ b/src/ovirt/node/setup/core/network_page.py
@@ -90,7 +90,7 @@
"bond.options"])
def name(self):
- return "Network"
+ return _("Network")
def rank(self):
return 10
@@ -161,22 +161,22 @@
mbond = defaults.NicBonding().retrieve()
bond_status = ", ".join(mbond["slaves"]
or [])
- bond_lbl = "Remove %s (%s)" % (mbond["name"], bond_status) \
- if bond_status else "Create Bond"
+ bond_lbl = _("Remove %s (%s)") % (mbond["name"], bond_status) \
+ if bond_status else _("Create Bond")
- ws = [ui.Header("header[0]", "System Identification"),
- ui.Entry("hostname", "Hostname:"),
+ ws = [ui.Header("header[0]", _("System Identification")),
+ ui.Entry("hostname", _("Hostname:")),
ui.Divider("divider[0]"),
- ui.Entry("dns[0]", "DNS Server 1:"),
- ui.Entry("dns[1]", "DNS Server 2:"),
+ ui.Entry("dns[0]", _("DNS Server 1:")),
+ ui.Entry("dns[1]", _("DNS Server 2:")),
ui.Divider("divider[1]"),
- ui.Entry("ntp[0]", "NTP Server 1:"),
- ui.Entry("ntp[1]", "NTP Server 2:"),
+ ui.Entry("ntp[0]", _("NTP Server 1:")),
+ ui.Entry("ntp[1]", _("NTP Server 2:")),
ui.Divider("divider[2]"),
NicTable("nics", height=3),
ui.Row("row[0]",
- [ui.Button("button.ping", "Ping"),
+ [ui.Button("button.ping", _("Ping")),
ui.Button("button.toggle_bond", bond_lbl)
])
]
@@ -247,7 +247,7 @@
self.logger.debug("Effective Model: %s" % effective_model)
# This object will contain all transaction elements to be executed
- txs = utils.Transaction("Network Interface Configuration")
+ txs = utils.Transaction(_("Network Interface Configuration"))
# Special case: A NIC was selected, display that dialog!
if "nics" in changes and len(changes) == 1:
@@ -483,8 +483,8 @@
padd = lambda l: l.ljust(12)
ws = [ui.Row("dialog.nic._row[0]",
- [ui.KeywordLabel("dialog.nic.driver", padd("Driver: ")),
- ui.KeywordLabel("dialog.nic.vendor", padd("Vendor: ")),
+ [ui.KeywordLabel("dialog.nic.driver", padd(_("Driver: "))),
+ ui.KeywordLabel("dialog.nic.vendor", padd(_("Vendor: "))),
]),
ui.Row("dialog.nic._row[2]",
@@ -496,65 +496,65 @@
ui.Divider("dialog.nic._divider[0]"),
- ui.Label("dialog.nic.ipv4._header", "IPv4 Settings"),
+ ui.Label("dialog.nic.ipv4._header", _("IPv4 Settings")),
ui.Options("dialog.nic.ipv4.bootproto",
- "Bootprotocol: ", [("none", "Disabled"),
- ("dhcp", "DHCP"),
- ("static", "Static")
+ "Bootprotocol: ", [("none", _("Disabled")),
+ ("dhcp", _("DHCP")),
+ ("static", _("Static"))
]),
ui.Row("dialog.nic._row[4]",
[ui.Entry("dialog.nic.ipv4.address",
- padd("IP Address: ")),
+ padd(_("IP Address: "))),
ui.Entry("dialog.nic.ipv4.netmask",
- padd(" Netmask: "))]),
+ padd(_(" Netmask: ")))]),
ui.Row("dialog.nic._row[5]",
[ui.Entry("dialog.nic.ipv4.gateway",
- padd("Gateway: ")),
+ padd(_("Gateway: "))),
ui.Label("dummy[0]", "")]),
ui.Divider("dialog.nic._divider[1]"),
- ui.Label("dialog.nic.ipv6._header", "IPv6 Settings"),
+ ui.Label("dialog.nic.ipv6._header", _("IPv6 Settings")),
ui.Options("dialog.nic.ipv6.bootproto",
- "Bootprotocol: ", [("none", "Disabled"),
- ("auto", "Auto"),
- ("dhcp", "DHCP"),
- ("static", "Static")
+ "Bootprotocol: ", [("none", _("Disabled")),
+ ("auto", _("Auto")),
+ ("dhcp", _("DHCP")),
+ ("static", _("Static"))
]),
ui.Row("dialog.nic._row[6]",
[ui.Entry("dialog.nic.ipv6.address",
- padd("IP Address: ")),
+ padd(_("IP Address: "))),
ui.Entry("dialog.nic.ipv6.netmask",
- padd(" Prefix Length: "))]),
+ padd(_(" Prefix Length: ")))]),
ui.Row("dialog.nic._row[7]",
[ui.Entry("dialog.nic.ipv6.gateway",
- padd("Gateway: ")),
+ padd(_("Gateway: "))),
ui.Label("dummy[1]", "")]),
ui.Divider("dialog.nic._divider[2]"),
ui.Row("dialog.nic._row[8]",
[ui.Entry("dialog.nic.vlanid",
- padd("VLAN ID: ")),
+ padd(_("VLAN ID: "))),
ui.Label("dummy[2]", "")]),
ui.Divider("dialog.nic._divider[3]"),
ui.Checkbox("dialog.nic.layout_bridged",
- "Use Bridge: "),
+ _("Use Bridge: ")),
ui.Divider("dialog.nic._divider[4]"),
- ui.Button("dialog.nic.identify", "Flash Lights to Identify"),
+ ui.Button("dialog.nic.identify", _("Flash Lights to Identify")),
]
self.plugin.widgets.add(ws)
self.children = ws
- self.buttons = [ui.SaveButton("dialog.nic.save", "Save"),
- ui.CloseButton("dialog.nic.close", "Close")
+ self.buttons = [ui.SaveButton("dialog.nic.save", _("Save")),
+ ui.CloseButton("dialog.nic.close", _("Close"))
]
self.plugin._nic_details_group.enabled(False)
self.plugin.widgets["dialog.nic.vlanid"].enabled(True)
@@ -563,9 +563,9 @@
class CreateBondDialog(ui.Dialog):
def __init__(self, path):
- widgets = [ui.Entry("bond.name", "Name:"),
+ widgets = [ui.Entry("bond.name", _("Name:")),
ui.Divider("bond.divider[0]"),
- ui.Entry("bond.options", "Options:"),
+ ui.Entry("bond.options", _("Options:")),
ui.Divider("bond.divider[1]"),
NicTable("bond.slaves", multi=True)]
- super(CreateBondDialog, self).__init__(path, "Create Bond", widgets)
+ super(CreateBondDialog, self).__init__(path, _("Create Bond"), widgets)
diff --git a/src/ovirt/node/setup/core/performance_page.py b/src/ovirt/node/setup/core/performance_page.py
index 888b3b2..8cd3b38 100644
--- a/src/ovirt/node/setup/core/performance_page.py
+++ b/src/ovirt/node/setup/core/performance_page.py
@@ -31,7 +31,7 @@
_model = None
def name(self):
- return "Performance"
+ return _("Performance")
def rank(self):
return 100
@@ -50,16 +50,16 @@
profiles = [(profile, profile) for profile in
tuned.get_available_profiles()]
- ws = [ui.Header("header", "tuned Configuration"),
- ui.Label("label", "Choose the tuned profile you would " +
- "like to apply to this system."),
+ ws = [ui.Header("header", _("tuned Configuration")),
+ ui.Label("label", _("Choose the tuned profile you would ") +
+ _("like to apply to this system.")),
ui.Divider("divider[0]"),
- ui.KeywordLabel("tuned.profile", "Current Active Profile: "),
- ui.Table("tuned.profile", "", "Available tuned Profiles",
+ ui.KeywordLabel("tuned.profile", _("Current Active Profile: ")),
+ ui.Table("tuned.profile", "", _("Available tuned Profiles"),
profiles),
]
page = ui.Page("page", ws)
- page.buttons = [ui.SaveButton("page.save")]
+ page.buttons = [ui.SaveButton("page.save", _("Save"))]
self.widgets.add(page)
return page
diff --git a/src/ovirt/node/setup/core/ping.py b/src/ovirt/node/setup/core/ping.py
index 90cb297..7b01a0c 100644
--- a/src/ovirt/node/setup/core/ping.py
+++ b/src/ovirt/node/setup/core/ping.py
@@ -32,7 +32,7 @@
_model = None
def name(self):
- return "Networking/Ping"
+ return _("Networking/Ping")
def rank(self):
return 999
@@ -67,13 +67,13 @@
"""Describes the UI this plugin requires
This is an ordered list of (path, widget) tuples.
"""
- ws = [ui.Header("ping.header", "Ping a remote host"),
- ui.Entry("ping.address", "Address:"),
- ui.Entry("ping.count", "Count:"),
+ ws = [ui.Header("ping.header", _("Ping a remote host")),
+ ui.Entry("ping.address", _("Address:")),
+ ui.Entry("ping.count", _("Count:")),
ui.Divider("divider[1]"),
- ui.SaveButton("ping.do_ping", "Ping"),
+ ui.SaveButton("ping.do_ping", _("Ping")),
ui.Divider("divider[2]"),
- ui.Label("ping.result", "Result:"),
+ ui.Label("ping.result", _("Result:")),
]
page = ui.Page("page", ws)
diff --git a/src/ovirt/node/setup/core/plugins_page.py b/src/ovirt/node/setup/core/plugins_page.py
index f43cf84..a8d2fdb 100644
--- a/src/ovirt/node/setup/core/plugins_page.py
+++ b/src/ovirt/node/setup/core/plugins_page.py
@@ -37,7 +37,7 @@
self._model = {}
def name(self):
- return "Plugins"
+ return _("Plugins")
def rank(self):
return 300
@@ -46,34 +46,34 @@
all_plugins = self.__list_of_plugins()
if all_plugins:
selected_plugin = all_plugins[0][0]
- ws = [ui.Header("header[0]", "Installed Plugins"),
+ ws = [ui.Header("header[0]", _("Installed Plugins")),
- ui.Table("plugins.installed", "", "Installed plugins:",
+ ui.Table("plugins.installed", "", _("Installed plugins:"),
all_plugins, selected_plugin),
ui.Divider("divider[0]"),
- ui.Row("row[0]", [ui.Label("label[0]", "Name:"),
+ ui.Row("row[0]", [ui.Label("label[0]", _("Name:")),
ui.Label("plugin.name", "")]),
- ui.Row("row[1]", [ui.Label("label[0]", "Version:"),
+ ui.Row("row[1]", [ui.Label("label[0]", _("Version:")),
ui.Label("plugin.version", "")]),
- ui.Row("row[2]", [ui.Label("label[0]", "Date installed:"),
+ ui.Row("row[2]", [ui.Label("label[0]", _("Date installed:")),
ui.Label("plugin.createdat", "")]),
ui.Divider("divider[1]"),
- ui.Row("row[3]", [ui.SaveButton("button.drpm", "RPM Diff"),
+ ui.Row("row[3]", [ui.SaveButton("button.drpm", _("RPM Diff")),
ui.SaveButton("button.dsrpm",
- "SRPM Diff"),
+ _("SRPM Diff")),
ui.SaveButton("button.dfile",
- "File Diff")])
+ _("File Diff"))])
]
else:
- ws = [ui.Header("header[0]", "Plugins"),
- ui.Label("label[0]", "There are no plugins currently " +
- "installed")]
+ ws = [ui.Header("header[0]", _("Plugins")),
+ ui.Label("label[0]",
+ _("There are no plugins currently installed"))]
page = ui.Page("page", ws)
page.buttons = []
diff --git a/src/ovirt/node/setup/core/remote_storage_page.py b/src/ovirt/node/setup/core/remote_storage_page.py
index 810efc5..fbb9964 100644
--- a/src/ovirt/node/setup/core/remote_storage_page.py
+++ b/src/ovirt/node/setup/core/remote_storage_page.py
@@ -32,7 +32,7 @@
_model = None
def name(self):
- return "Remote Storage"
+ return _("Remote Storage")
def rank(self):
return 70
@@ -52,11 +52,11 @@
}
def ui_content(self):
- ws = [ui.Header("header", "Remote Storage"),
- ui.Entry("iscsi.initiator_name", "iSCSI Initiator Name:",
+ ws = [ui.Header("header", _("Remote Storage")),
+ ui.Entry("iscsi.initiator_name", _("iSCSI Initiator Name:"),
align_vertical=True),
ui.Divider("divider[0]"),
- ui.Entry("nfsv4.domain", "NFSv4 Domain (example.redhat.com):",
+ ui.Entry("nfsv4.domain", _("NFSv4 Domain (example.redhat.com):"),
align_vertical=True),
]
@@ -76,7 +76,7 @@
self.logger.debug("Changes: %s" % changes)
self.logger.debug("Effective Model: %s" % effective_model)
- txs = utils.Transaction("Updating remote storage configuration")
+ txs = utils.Transaction(_("Updating remote storage configuration"))
iscsi_keys = ["iscsi.initiator_name"]
if changes.contains_any(iscsi_keys):
diff --git a/src/ovirt/node/setup/core/security_page.py b/src/ovirt/node/setup/core/security_page.py
index e81d689..e5cc38e 100644
--- a/src/ovirt/node/setup/core/security_page.py
+++ b/src/ovirt/node/setup/core/security_page.py
@@ -31,7 +31,7 @@
_model = {}
def name(self):
- return "Security"
+ return _("Security")
def rank(self):
return 20
@@ -56,13 +56,13 @@
}
def ui_content(self):
- ws = [ui.Header("header[0]", "Remote Access"),
- ui.Checkbox("ssh.pwauth", "Enable SSH password authentication"),
- ui.Header("header[1]", "Strong Random Number Generator"),
- ui.Checkbox("strongrng.disable_aesni", "Disable AES-NI"),
- ui.Entry("strongrng.num_bytes", "Bytes Used:"),
- ui.Header("header[2]", "Password for the admin user"),
- ui.ConfirmedEntry("passwd.admin.password", "Password:", True)
+ ws = [ui.Header("header[0]", _("Remote Access")),
+ ui.Checkbox("ssh.pwauth", _("Enable SSH password authentication")),
+ ui.Header("header[1]", _("Strong Random Number Generator")),
+ ui.Checkbox("strongrng.disable_aesni", _("Disable AES-NI")),
+ ui.Entry("strongrng.num_bytes", _("Bytes Used:")),
+ ui.Header("header[2]", _("Password for the admin user")),
+ ui.ConfirmedEntry("passwd.admin.password", _("Password:"), True)
]
page = ui.Page("page", ws)
@@ -95,7 +95,7 @@
ssh_keys = ["ssh.pwauth", "strongrng.num_bytes",
"strongrng.disable_aesni"]
- txs = utils.Transaction("Updating security configuration")
+ txs = utils.Transaction(_("Updating security configuration"))
if changes.contains_any(ssh_keys):
model = defaults.SSH()
@@ -109,7 +109,7 @@
# Create a custom transaction element, because the password
# is not handled/saved in the defaults file
class SetAdminPasswd(utils.Transaction.Element):
- title = "Setting admin password"
+ title = _("Setting admin password")
def commit(self):
self.logger.debug("Setting admin password.")
diff --git a/src/ovirt/node/setup/core/status_page.py b/src/ovirt/node/setup/core/status_page.py
index 2fdef7a..89d02bd 100644
--- a/src/ovirt/node/setup/core/status_page.py
+++ b/src/ovirt/node/setup/core/status_page.py
@@ -40,7 +40,7 @@
_model = None
def name(self):
- return "Status"
+ return _("Status")
def rank(self):
return 0
@@ -75,38 +75,38 @@
# Network related widgets, appearing in one row
network_widgets = [ui.KeywordLabel("networking",
- aligned("Networking: ")),
+ aligned(_("Networking: "))),
ui.Label("networking.bridge", ""),
]
- action_widgets = [ui.Button("action.lock", "Lock"),
- ui.Button("action.logoff", "Log Off"),
- ui.Button("action.restart", "Restart"),
- ui.Button("action.poweroff", "Power Off")
+ action_widgets = [ui.Button("action.lock", _("Lock")),
+ ui.Button("action.logoff", _("Log Off")),
+ ui.Button("action.restart", _("Restart")),
+ ui.Button("action.poweroff", _("Power Off"))
]
- widgets = [ui.Header("header[0]", "System Information"),
+ widgets = [ui.Header("header[0]", _("System Information")),
- ui.KeywordLabel("status", aligned("Status: ")),
+ ui.KeywordLabel("status", aligned(_("Status: "))),
ui.Divider("divider[0]"),
ui.Row("row[0]", network_widgets),
ui.Divider("divider[1]"),
- ui.KeywordLabel("logs", aligned("Logs: ")),
+ ui.KeywordLabel("logs", aligned(_("Logs: "))),
ui.Divider("divider[2]"),
ui.KeywordLabel("libvirt.num_guests",
- aligned("Running VMs: ")),
+ aligned(_("Running VMs: "))),
ui.Divider("divider[3]"),
- ui.Label("support.hint", "Press F8 for support menu"),
+ ui.Label("support.hint", _("Press F8 for support menu")),
ui.Divider("divider[4]"),
ui.Row("row[1]",
- [ui.Button("action.hostkey", "View Host Key"),
+ [ui.Button("action.hostkey", _("View Host Key")),
ui.Button("action.cpu_details",
- "View CPU Details"),
+ _("View CPU Details")),
]),
ui.Row("row[2]", action_widgets),
@@ -123,11 +123,11 @@
def on_merge(self, changes):
# Handle button presses
- number_of_vm = "There are %s Virtual Machines running." \
+ number_of_vm = _("There are %s Virtual Machines running.") \
% (virt.number_of_domains())
if "action.lock" in changes:
self.logger.info("Locking screen")
- self._lock_dialog = LockDialog()
+ self._lock_dialog = LockDialog(title=_("This screen is locked."))
self.application.ui.hotkeys_enabled(False)
self.widgets.add(self._lock_dialog)
return self._lock_dialog
@@ -139,7 +139,7 @@
self._lock_dialog.close()
self.application.ui.hotkeys_enabled(True)
else:
- self.application.notice("The provided password was incorrect.")
+ self.application.notice(_("The provided password was incorrect."))
self.widgets["password"].text("")
elif "action.logoff" in changes:
@@ -149,10 +149,10 @@
elif "action.restart" in changes:
self.logger.info("Restarting")
return ui.ConfirmationDialog("confirm.reboot",
- "Confirm System Restart",
- number_of_vm +
- "\nThis will restart the system,"
- "proceed?")
+ _("Confirm System Restart").encode('utf8'),
+ number_of_vm.encode('utf8') +
+ _("\nThis will restart the system,").encode('utf8')+
+ _("proceed?").encode('utf8'))
elif "confirm.reboot.yes" in changes:
self.logger.info("Confirm Restarting")
@@ -161,10 +161,10 @@
elif "action.poweroff" in changes:
self.logger.info("Shutting down")
return ui.ConfirmationDialog("confirm.shutdown",
- "Confirm System Poweroff",
- number_of_vm +
- "\nThis will shut down the system,"
- "proceed?")
+ _("Confirm System Poweroff").encode('utf8'),
+ number_of_vm.encode('utf8') +
+ _("\nThis will shut down the system,").encode('utf8')+
+ _("proceed?").encode('utf8'))
elif "confirm.shutdown.yes" in changes:
self.logger.info("Confirm Shutting down")
@@ -172,11 +172,11 @@
elif "action.hostkey" in changes:
self.logger.info("Showing hostkey")
- return HostkeyDialog("dialog.hostkey", "Host Key")
+ return HostkeyDialog("dialog.hostkey", _("Host Key"))
elif "action.cpu_details" in changes:
self.logger.info("Showing CPU details")
- return CPUFeaturesDialog("dialog.cpu_details", "CPU Details")
+ return CPUFeaturesDialog("dialog.cpu_details", _("CPU Details"))
elif "_save" in changes:
self.widgets["dialog.hostkey"].close()
@@ -209,13 +209,13 @@
ssh = security.Ssh()
fp, hk = ssh.get_hostkey()
self.children = [ui.Label("hostkey.label[0]",
- "RSA Host Key Fingerprint:"),
+ _("RSA Host Key Fingerprint:")),
ui.Label("hostkey.fp", fp),
ui.Divider("hostkey.divider[0]"),
ui.Label("hostkey.label[1]",
- "RSA Host Key:"),
+ _("RSA Host Key:")),
ui.Label("hostkey", "\n".join(textwrap.wrap(hk, 64))),
]
self.buttons = [ui.CloseButton("dialog.close")]
@@ -226,7 +226,7 @@
"""
def __init__(self, path, title):
msg = utils.system.cpu_details()
- super(CPUFeaturesDialog, self).__init__(path, title, msg)
+ super(CPUFeaturesDialog, self).__init__(path, title.encode('utf8'), msg.encode('utf8'))
class LockDialog(ui.Dialog):
@@ -235,10 +235,10 @@
def __init__(self, path="lock.dialog", title="This screen is locked."):
super(LockDialog, self).__init__(path, title, [])
self.children = [ui.Header("lock.label[0]",
- "Enter the admin password to unlock"),
- ui.KeywordLabel("username", "Username: ",
+ _("Enter the admin password to unlock")),
+ ui.KeywordLabel("username", _("Username: "),
os.getlogin()),
- ui.PasswordEntry("password", "Password:")
+ ui.PasswordEntry("password", _("Password:"))
]
- self.buttons = [ui.Button("action.unlock", "Unlock")]
+ self.buttons = [ui.Button("action.unlock", _("Unlock"))]
self.escape_key = None
diff --git a/src/ovirt/node/setup/core/support_page.py b/src/ovirt/node/setup/core/support_page.py
index 6bf5071..d838cec 100644
--- a/src/ovirt/node/setup/core/support_page.py
+++ b/src/ovirt/node/setup/core/support_page.py
@@ -35,7 +35,7 @@
super(Plugin, self).__init__(application)
def name(self):
- return "Support"
+ return _("Support")
def rank(self):
return 999
@@ -44,10 +44,10 @@
return False
def ui_content(self):
- ws = [ui.Header("header[0]", "Support Info"),
- ui.Label("support.info", "Select one of the logfiles below."),
+ ws = [ui.Header("header[0]", _("Support Info")),
+ ui.Label("support.info", _("Select one of the logfiles below.")),
ui.Divider("divider[0]"),
- ui.Table("support.logfile", "", "Available Logfiles",
+ ui.Table("support.logfile", "", _("Available Logfiles"),
self.__debugfiles_to_offer()),
]
@@ -81,7 +81,7 @@
if cmd:
contents = process.check_output(cmd, shell=True,
stderr=process.STDOUT)
- return ui.TextViewDialog("output.dialog", "Logfile",
+ return ui.TextViewDialog("output.dialog", _("Logfile"),
contents)
def __debugfiles_to_offer(self):
diff --git a/src/ovirt/node/ui/__init__.py b/src/ovirt/node/ui/__init__.py
index b607b56..4234fb7 100644
--- a/src/ovirt/node/ui/__init__.py
+++ b/src/ovirt/node/ui/__init__.py
@@ -776,8 +776,8 @@
def __init__(self, path, children, title=None):
super(Page, self).__init__(path, children, title)
- self.buttons = self.buttons or [SaveButton("%s.save" % path),
- ResetButton("%s.reset" % path)
+ self.buttons = self.buttons or [SaveButton("%s.save" % path, _("Save")),
+ ResetButton("%s.reset" % path, _("Reset"))
]
def elements(self):
@@ -796,8 +796,8 @@
def __init__(self, path, title, children):
super(Dialog, self).__init__(path, children, title)
- self.buttons = [SaveButton("%s.save" % path),
- CloseButton("%s.close" % path)
+ self.buttons = [SaveButton("%s.save" % path, _("Save")),
+ CloseButton("%s.close" % path, _("Reset"))
]
self.on_close_change = self.new_signal()
self.close(False)
@@ -814,7 +814,7 @@
def __init__(self, path, title, text, buttons=None):
super(InfoDialog, self).__init__(path, title, [])
self.children = [Label(path + ".label", text)]
- self.buttons = buttons or [CloseButton(path + ".close")]
+ self.buttons = buttons or [CloseButton(path + ".close", _("Close"))]
class TextViewDialog(Dialog):
@@ -822,9 +822,9 @@
"""
def __init__(self, path, title, contents, height=16):
super(TextViewDialog, self).__init__(path, title, [])
- self.children = [Table("contents", "", "Contents",
+ self.children = [Table("contents", "", _("Contents"),
contents, height=height)]
- self.buttons = [CloseButton("dialog.close")]
+ self.buttons = [CloseButton("dialog.close", _("Close"))]
class ConfirmationDialog(InfoDialog):
@@ -838,8 +838,8 @@
]
if not buttons:
# Default: OK and Close
- self.buttons = [Button(path + ".yes", "OK"),
- CloseButton(path + ".close")]
+ self.buttons = [Button(path + ".yes", _("OK")),
+ CloseButton(path + ".close", _("Close"))]
class TransactionProgressDialog(Dialog):
@@ -848,15 +848,15 @@
def __init__(self, path, transaction, plugin, initial_text=""):
self.transaction = transaction
- title = "Transaction: %s" % self.transaction.title
+ title = _("Transaction: %s") % self.transaction.title
self._progress_label = Label("dialog.progress", initial_text)
super(TransactionProgressDialog, self).__init__(path,
- title,
+ title.encode('utf8'),
[self._progress_label])
self.texts = [initial_text, ""]
self.plugin = plugin
- self._close_button = CloseButton("button.close")
+ self._close_button = CloseButton("button.close", _("Close"))
self.buttons = [self._close_button]
def add_update(self, txt):
--
To view, visit http://gerrit.ovirt.org/18335
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7f7e44dc46069aecd00950279a3800d496b1c555
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-node
Gerrit-Branch: master
Gerrit-Owner: hai bo <boh.ricky at gmail.com>
More information about the node-patches
mailing list