Trying to run the mki18n.py script on my Python code, I get a warning on this line:
>>> dlg = wx.MessageDialog(None, str (_("Attached device is \"%s\",\nschedule file header is for \"%s\"") % (rt_model, line)), _("Device mismatch"), wx.OK | wx.ICON_ERROR)
which then gives this:
warning: 'msgid' format string with unnamed arguments cannot be properly localized:
The translator cannot reorder the arguments.
Please consider using a format string with named arguments,
and a mapping instead of a tuple for the arguments.
The mki18n.py script does not like the presence of the two successive s%
, but I am not able to decode what the warning message says. Otherwise (running my program without to care about i18n) I get no errors and that dialog always displays fine.
What is wrong in that line ? (what can be improved ?)
edit By using geni18n.py (and its associated file from the i18nwxapp package) I get the expected result with no error (i.e. generate the .pot file for translation). Still I don't know if there is a problem in my code that geni18n tolerates, or if mki18n has a problem that gets triggered by my particular line of code (?).
So basically what the message says is that the translator would have difficulties reordering the variables, if he/she needs to. So consider the following:
my_string = "Hello %s, it is %s o'clock." % ('Foo', 'two')
Now assume the translator needs the two
first and the Foo
second:
translated_string = "It is %s o'clock, Mr. %s" % ('Foo', 'two')
Without using format string with named arguments
, the Foo
would still go into the first %s
, thus giving you:
print translated_string
# Output: It is Foo o'clock, Mr. two.
To solve the problem, simply use named arguments
. So the above example would be:
my_string = "Hello %(person)s, it is %(time)s o'clock." % ({
'person':'Foo',
'time':'two'
})
translated_string = "It is %(time)s o'clock, Mr. %(person)s" % ({
'person':'Foo',
'time':'two'
})
This way, the translator can put person
and time
where ever he/she wants. It also gives them an idea, what the variable is about, which they wouldn't know if you used %s
only.
Hope that clarifies things.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With