[Kimchi-devel] [PATCH 2/8] refactor exception: Add messages to be translated on backend

Aline Manera alinefm at linux.vnet.ibm.com
Tue Feb 11 12:14:43 UTC 2014


On 02/11/2014 01:08 AM, Leonardo Augusto Guimarães Garcia wrote:
> On 02/09/2014 08:47 PM, Aline Manera wrote:
>> From: Aline Manera <alinefm at br.ibm.com>
>>
>> src/kimchi/i18n.py and plugins/sample/i18n.py contain all messages used
>> in backend to report error to the user
>>
>> Signed-off-by: Aline Manera <alinefm at br.ibm.com>
>> ---
>>   plugins/sample/i18n.py |   15 +++++
>>   src/kimchi/i18n.py     |  144 ++++++++++++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 159 insertions(+)
>>
>> diff --git a/plugins/sample/i18n.py b/plugins/sample/i18n.py
>> index 204460c..b4cd5cb 100644
>> --- a/plugins/sample/i18n.py
>> +++ b/plugins/sample/i18n.py
>> @@ -26,4 +26,19 @@ _ = gettext.gettext
>>
>>
>>   messages = {
>> +    "SPAPI0001E": _("Unkown parameter specified %(value)s"),
>> +    "SPAPI0002E": _("The specified value %(value)s is not a positive number"),
>> +
>> +    "SPCIRC0001E": _("Circle %(name)s already exists"),
>> +    "SPCIRC0002E": _("Circle %(name)s does not exist"),
>> +    "SPCIRC0003E": _("Specify name and radius to create a Circle"),
>> +    "SPCIRC0004E": _("Circle name must be a string"),
>> +    "SPCIRC0005E": _("Circle radius must be a positive number"),
>> +
>> +    "SPRET0001E": _("Rectangle %(name)s already exists"),
>> +    "SPRET0002E": _("Rectangle %(name)s does not exist"),
>> +    "SPRET0003E": _("Specify name, length and width to create a Rectangle"),
>> +    "SPRET0004E": _("Rectangle name must be a string"),
>> +    "SPRET0005E": _("Rectangle length must be a positive number"),
>> +    "SPRET0006E": _("Rectangle width must be a positive number"),
>  From where does these key values come? Are they just randomly chosen?
> Randomly or not, there should be a comment on how they were chosen in
> the commit message.

I have explained about them on RFC.
But of course, it needs to be in commit message. I will add it on V2.

> Also, IIRC, I heard that we were using the English version of the
> message as the key instead of these crypt keys. Has this changed?

There are 2 different things - the code and the key.

This file is built like:
<code>: _(<key>)

The key is an English text which represents the text to be translated 
and recognized by gettext.

The code I am introducing now so we can identify the error message 
independent of the language
used by the user.
For example, an user running Kimchi in Japanese can report a bug with 
the errors messages he got
and we can identify the error by the code as we probably don't know 
Japanese.

The error message will be shown to the user like:
<code>: <translated-message>

For example:
KCHASYNC0001E: Datastore is not initiated in the model object.

> Best regards,
>
> Leonardo Garcia
>>   }
>> diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
>> index 204460c..1a8fb5b 100644
>> --- a/src/kimchi/i18n.py
>> +++ b/src/kimchi/i18n.py
>> @@ -26,4 +26,148 @@ _ = gettext.gettext
>>
>>
>>   messages = {
>> +    "KCHAPI0001E": _("Unkown parameter specified %(value)s"),
>> +
>> +    "KCHASYNC0001E": _("Datastore is not initiated in the model object."),
>> +
>> +    "KCHAUTH0001E": _("Authentication failed for user '%(userid)s'. [Error code: %(code)s]"),
>> +
>> +    "KCHDISKS0001E": _("Error while getting block devices. Details: %(err)s"),
>> +    "KCHDISKS0002E": _("Error while getting block device information for %(device)s."),
>> +
>> +    "KCHDL0001E": _("Unable to find distro file: %(filename)s"),
>> +    "KCHDL0002E": _("Unable to parse distro file: %(filename)s.Make sure, it is a json file."),
>> +
>> +    "KCHISCSI0001E": _("Unable to login to iSCSI host target %(portal)s. Details: %(err)s"),
>> +    "KCHISCSI0002E": _("Unable to login to iSCSI host %(host)s target %(target)s"),
>> +
>> +    "KCHISO0001E": _("Unable to find ISO file ISO %(filename)s"),
>> +    "KCHISO0002E": _("The ISO file %(filename)s is not bootable"),
>> +    "KCHISO0003E": _("The ISO file %(filename)s does not have a valid El Torito boot record"),
>> +    "KCHISO0004E": _("Invalid El Torito validation entry in ISO %(filename)s"),
>> +    "KCHISO0005E": _("Invalid El Torito boot indicator in ISO %(filename)s"),
>> +    "KCHISO0006E": _("Unexpected volume type for primary volume in ISO %(filename)s"),
>> +    "KCHISO0007E": _("Bad format while reading volume descriptor in ISO %(filename)s"),
>> +
>> +    "KCHVM0001E": _("Virtual machine $(name)s already exists"),
>> +    "KCHVM0002E": _("Virtual machine %(name)s does not exist"),
>> +    "KCHVM0003E": _("Unable to rename virtual machine %(name)s. The name %(new_name)s already exists or it is not powered off."),
>> +    "KCHVM0004E": _("Unable to retrieve screenshot for stopped virtual machine %(name)s"),
>> +    "KCHVM0005E": _("Remote ISO image is not supported by this server."),
>> +    "KCHVM0006E": _("Screenshot not supported for virtual machine %(name)s"),
>> +    "KCHVM0007E": _("Unable to create virtual machine %(name)s. Details: %(err)s"),
>> +    "KCHVM0008E": _("Unable to rename virtual machine %(name)s. Details: %(err)s"),
>> +    "KCHVM0009E": _("Unable to retrieve virtual machine %(name)s. Details: %(err)"),
>> +    "KCHVM0010E": _("Unable to connect to powered off machine %(name)s."),
>> +    "KCHVM0011E": _("Virtual machine name must be a string"),
>> +    "KCHVM0012E": _("Invalid template URI: %(value)s specified for virtual machine"),
>> +    "KCHVM0013E": _("Invalid storage pool URI: %(value)s specified for virtual machine"),
>> +    "KCHVM0014E": _("Supported virtual machine graphics are spice or vnc"),
>> +    "KCHVM0015E": _("Graphics address to listen on must be IPv4 or IPv6"),
>> +    "KCHVM0016E": _("Specify a template to create a Virtual Machine from"),
>> +
>> +    "KCHVMIF0001E": _("Interface %(iface)s does not exist in virtual machine %(name)s"),
>> +    "KCHVMIF0002E": _("Network %(network)s specified for virtual machine %(name)s does not exist"),
>> +    "KCHVMIF0003E": _("Do not support guest interface hot plug attachment"),
>> +    "KCHVMIF0004E": _("Supported virtual machine interfaces type is only network"),
>> +    "KCHVMIF0005E": _("Network name for virtual machine interface must be a string"),
>> +    "KCHVMIF0006E": _("Invalid network model card specified for virtual machine interface"),
>> +    "KCHVMIF0007E": _("Specify type and network to add a new virtual machine interface"),
>> +
>> +    "KCHTMPL0001E": _("Template %(name)s already exists"),
>> +    "KCHTMPL0002E": _("Template %(name)s does not exist"),
>> +    "KCHTMPL0003E": _("Network '%(network)s' specified for template %(template)s does not exist"),
>> +    "KCHTMPL0004E": _("Storage Pool %(pool)s specified for template %(template)s does not exist"),
>> +    "KCHTMPL0005E": _("Storage Pool %(pool)s specified for template %(template)s is not active"),
>> +    "KCHTMPL0006E": _("Invalid parameter '%(param)s' specified for cdrom."),
>> +    "KCHTMPL0007E": _("Network %(network)s specified for template %(template)s is not active"),
>> +    "KCHTMPL0008E": _("Template name must be a string"),
>> +    "KCHTMPL0009E": _("Template icon must be a path to the image"),
>> +    "KCHTMPL0010E": _("Template distribution must be a string"),
>> +    "KCHTMPL0011E": _("Template distribution version must be a string"),
>> +    "KCHTMPL0012E": _("The number of CPUs must be a integer"),
>> +    "KCHTMPL0013E": _("Amount of memory (MB) must be an integer greater than 512"),
>> +    "KCHTMPL0014E": _("Template CDROM must be a local or remote ISO file"),
>> +    "KCHTMPL0015E": _("Invalid storage pool URI %(value)s specified for Template"),
>> +    "KCHTMPL0016E": _("Specify an ISO image as CDROM to create a Template"),
>> +    "KCHTMPL0017E": _("All networks for the Template must be specified in a list."),
>> +
>> +    "KCHPOOL0001E": _("Storage Pool %(name)s already exists"),
>> +    "KCHPOOL0002E": _("Storage Pool %(name)s does not exist"),
>> +    "KCHPOOL0003E": _("Autostart flag must be true or false"),
>> +    "KCHPOOL0004E": _("Specify %(item)s in order to create the Storage Pool %(name)s"),
>> +    "KCHPOOL0005E": _("Unable to delete active Storage Pool %(name)s"),
>> +    "KCHPOOL0006E": _("Unable to list Storage Pools. Details: %(err)s"),
>> +    "KCHPOOL0007E": _("Unable to create Storage Pool %(name)s. Details: %(err)s"),
>> +    "KCHPOOL0008E": _("Unable to get number of Storage Volumes in Storage Pool %(name)s. Details: %(err)s"),
>> +    "KCHPOOL0009E": _("Unable to activate Storage Pool %(name)s. Details: %(err)s"),
>> +    "KCHPOOL0010E": _("Unable to deactivate Storage Pool %(name)s. Details: %(err)s"),
>> +    "KCHPOOL0011E": _("Unable to delete Storage Pool %(name)s. Details: %(err)s"),
>> +    "KCHPOOL0012E": _("Unable to create NFS Pool as export path %(path)s may block during mount"),
>> +    "KCHPOOL0013E": _("Unable to create NFS Pool as export path %(path)s mount failed"),
>> +    "KCHPOOL0014E": _("Unsupported Storage Pool type: %(type)s"),
>> +    "KCHPOOL0015E": _("Error while getting xml for Storage Pool %(pool)s"),
>> +    "KCHPOOL0016E": _("Storage Pool name must be a string"),
>> +    "KCHPOOL0017E": _("Supported Storage Pool types are dir, netfs, logical and kimchi-iso"),
>> +    "KCHPOOL0018E": _("Storage Pool path must be a string"),
>> +    "KCHPOOL0019E": _("Storage Pool host must be a IP or hostname"),
>> +    "KCHPOOL0020E": _("Storage Pool devices must be the full path to the block device"),
>> +    "KCHPOOL0021E": _("Storage Pool devices parameter must be a list"),
>> +    "KCHPOOL0022E": _("Target IQN of an iSCSI pool must be a string"),
>> +    "KCHPOOL0023E": _("Port of a remote storage server must be an integer between 1 and 65535"),
>> +    "KCHPOOL0024E": _("Login username of the iSCSI target must be a string"),
>> +    "KCHPOOL0025E": _("Login password of the iSCSI target must be a string"),
>> +    "KCHPOOL0026E": _("Specify name and type to create a Storage Pool"),
>> +
>> +    "KCHVOL0001E": _("Storage Volume %(name)s already exists"),
>> +    "KCHVOL0002E": _("Storage Volume %(name)s does not exist in Storage Pool %(pool)s"),
>> +    "KCHVOL0003E": _("Unable to create Storage Volume %(volume)s becuase Storage Pool %(pool)s is not active"),
>> +    "KCHVOL0004E": _("Specify %(item)s in order to create Storage Volume %(volume)s"),
>> +    "KCHVOL0005E": _("Unable to retrieve Storage Volume %(volume)s because Storage Pool %(pool)s is not active"),
>> +    "KCHVOL0006E": _("Unable to list Storage Volumes because Storage Pool %(pool)s is not active"),
>> +    "KCHVOL0007E": _("Unable to create Storage Volume %(name)s in Storage Pool %(pool)s. Details: %(err)s"),
>> +    "KCHVOL0008E": _("Unable to list Storage Volumes in Storage Pool %(pool)s. Details: %(err)s"),
>> +    "KCHVOL0009E": _("Unable to wipe Storage Volumes %(name)s. Details: %(err)s"),
>> +    "KCHVOL0010E": _("Unable to delete Storage Volume %(name)s. Details: %(err)s"),
>> +    "KCHVOL0011E": _("Unable to resize Storage Volume %(name)s. Details: %(err)s"),
>> +
>> +    "KCHIFACE0001E": _("Interface %(name)s does not exist"),
>> +
>> +    "KCHNET0001E": _("Network %(name)s already exists"),
>> +    "KCHNET0002E": _("Network %(name)s does not exist"),
>> +    "KCHNET0003E": _("Subnet %(subnet)s specified for network %(network)s  is not valid."),
>> +    "KCHNET0004E": _("Specify a network interface to create bridged network %(name)s"),
>> +    "KCHNET0005E": _("Unable to delete active network %(name)s"),
>> +    "KCHNET0006E": _("Interface %(iface)s specified for network %(network)s is already in use"),
>> +    "KCHNET0007E": _("Interface should be bare nic, bonding or bridge device."),
>> +    "KCHNET0008E": _("Unable to create network %(name)s. Details: %(err)s"),
>> +    "KCHNET0009E": _("Unable to find a free IP address for network '%(name)s'"),
>> +    "KCHNET0010E": _("Unable to create VLAN tagged bridge using interface %(iface)s. Details: %(err)"),
>> +    "KCHNET0011E": _("Network name must be a string"),
>> +    "KCHNET0012E": _("Supported network types are isolated, nat and bridge"),
>> +    "KCHNET0013E": _("Network subnet must be a string with ip address and prefix or netmask"),
>> +    "KCHNET0014E": _("Network interface must be a string"),
>> +    "KCHNET0015E": _("Network VLAN ID must be an integer between 1 and 4094"),
>> +    "KCHNET0016E": _("Specify name and type to create a Network"),
>> +
>> +    "KCHDR0001E": _("Debug report %(name)s does not exist"),
>> +    "KCHDR0002E": _("Debug report tool not found in system"),
>> +    "KCHDR0003E": _("Unable to create debug report %(name)s. Details: %(err)s."),
>> +    "KCHDR0004E": _("Can not find generated debug report named %(name)s"),
>> +    "KCHDR0005E": _("Unable to generate debug report %(name)s. Details: %(err)s"),
>> +
>> +    "KCHSR0001E": _("Storage server %(server)s was not used by Kimchi"),
>> +
>> +    "KCHDISTRO0001E": _("Distro '%(name)s' does not exist"),
>> +
>> +    "KCHPART0001E": _("Partition %(name)s does not exist in the host"),
>> +
>> +    "KCHHOST0001E": _("Unable to shutdown host machine as there are running virtual machines"),
>> +    "KCHHOST0002E": _("Unable to reboot host machine as there are running virtual machines"),
>> +
>> +    "KCHOBJST0001E": _("Unable to find %(item)s in datastore"),
>> +
>> +    "KCHUTILS0001E": _("Invalid URI %(uri)s"),
>> +    "KCHUTILS0002E": _("Timeout while running command '%(cmd)s' after %(seconds)s seconds"),
>> +    "KCHUTILS0003E": _("Unable to choose a virutal machine name"),
>>   }




More information about the Kimchi-devel mailing list