[Freeipa-devel] Localization patches.

Rob Crittenden rcritten at redhat.com
Tue Mar 1 04:05:29 UTC 2011


Pavel Zuna wrote:
> On 02/23/2011 07:09 PM, Pavel Zůna wrote:
>> On 2011-02-22 20:16, Rob Crittenden wrote:
>>> Pavel Zůna wrote:
>>>> On 2011-02-17 22:52, Rob Crittenden wrote:
>>>>> Pavel Zůna wrote:
>>>>>> On 2011-02-17 05:09, Rob Crittenden wrote:
>>>>>>> Pavel Zůna wrote:
>>>>>>>> My efforts in fixing localization all around the framework and
>>>>>>>> preparing
>>>>>>>> it for localizing docstrings have resulted in a lot of patches.
>>>>>>>> Because
>>>>>>>> I understand they have become a bit hard to track, I decided to
>>>>>>>> post
>>>>>>>> them all together in this thread to make review easier.
>>>>>>>>
>>>>>>>> After this is committed, there will be one more patch that switches
>>>>>>>> xgettext for pygettext. Then hopefully, we'll be pretty much set
>>>>>>>> when it
>>>>>>>> comes to i18n.
>>>>>>>>
>>>>>>>> Pavel
>>>>>>>
>>>>>>> Patch 81 isn't applying for me.
>>>>>>>
>>>>>>> Help is not working for me either, this is due to patch 80.
>>>>>>>
>>>>>>> $ ipa help user
>>>>>>> ipa: ERROR: NameError: global name '_' is not defined
>>>>>>> Traceback (most recent call last):
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line
>>>>>>> 1087, in
>>>>>>> run
>>>>>>> api.finalize()
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/plugable.py", line
>>>>>>> 619,
>>>>>>> in finalize
>>>>>>> plugin_iter(base, (magic[k] for k in magic))
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/base.py", line
>>>>>>> 397, in
>>>>>>> __init__
>>>>>>> sorted(members, key=lambda m: getattr(m, name_attr))
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/plugable.py", line
>>>>>>> 608,
>>>>>>> in plugin_iter
>>>>>>> plugins[klass] = PluginInstance(klass)
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/plugable.py", line
>>>>>>> 585,
>>>>>>> in __init__
>>>>>>> self.instance = klass()
>>>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/plugable.py", line
>>>>>>> 184,
>>>>>>> in __init__
>>>>>>> self.doc = _(inspect.getdoc(cls))
>>>>>>> NameError: global name '_' is not defined
>>>>>>> ipa: ERROR: an internal error has occurred
>>>>>>>
>>>>>>> Patches 69, 71 and 73 are still working fine.
>>>>>>>
>>>>>>> What is switching from xgettext to pygettext going to do?
>>>>>>
>>>>>> This was answered by John Dennis: xgettext doesn't parse python
>>>>>> docstrings.
>>>>>>
>>>>>>>
>>>>>>> rob
>>>>>>
>>>>>> Rebased version of 81 attached. It should also fix the traceback
>>>>>> you're
>>>>>> getting.
>>>>>>
>>>>>> Pavel
>>>>>
>>>>> Something is still not working. I'm having a hard time reproducing
>>>>> how I
>>>>> got this but with LANG=es_US.UTF-8 for a while I was getting this with
>>>>> every ipa user-* request:
>>>>>
>>>>> ipa: ERROR: UnicodeEncodeError: 'ascii' codec can't encode character
>>>>> u'\xf1' in position 20: ordinal not in range(128)
>>>>> Traceback (most recent call last):
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 1090, in
>>>>> run
>>>>> sys.exit(api.Backend.cli.run(argv))
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 917, in
>>>>> run
>>>>> rv = cmd.output_for_cli(self.api.Backend.textui, result, *args,
>>>>> **options)
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/frontend.py", line
>>>>> 953,
>>>>> in output_for_cli
>>>>> textui.print_entries(result, order, labels, flags, print_all)
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 346, in
>>>>> print_entries
>>>>> self.print_entry(entry, order, labels, flags, print_all, format,
>>>>> indent)
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 378, in
>>>>> print_entry
>>>>> label, value, format, indent, one_value_per_line
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 309, in
>>>>> print_attribute
>>>>> self.print_indented(format % (attr, text[0]), indent)
>>>>> File "/home/rcrit/redhat/freeipa-version/ipalib/cli.py", line 232, in
>>>>> print_indented
>>>>> print (CLI_TAB * indent + text)
>>>>> UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in
>>>>> position 20: ordinal not in range(128)
>>>>> ipa: ERROR: ha ocurrido un error interno
>>>>>
>>>>> I think it is blowing up on this user:
>>>>>
>>>>> User login: jose
>>>>> First name: Jose
>>>>> Last name: contraseñas
>>>>> Home directory: /home/jose
>>>>> Login shell: /bin/sh
>>>>> Account disabled: TRUE
>>>>> Member of groups: ipausers
>>>>>
>>>>> Then all of a sudden things started working fine, so I'm not sure
>>>>> what's
>>>>> going on.
>>>>>
>>>>> Is this traceback meaningful to you?
>>>>>
>>>>> rob
>>>>
>>>> This looks like a bug in the textui backend.
>>>>
>>>> You get this error when you do something like this:
>>>>
>>>> >>> a = u'\xf1'
>>>> >>> a.decode('utf-8')
>>>> Traceback (most recent call last):
>>>> File "<stdin>", line 1, in <module>
>>>> File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
>>>> return codecs.utf_8_decode(input, errors, True)
>>>> UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in
>>>> position 0: ordinal not in range(128)
>>>>
>>>> It means we're not handling encoding/decoding from/to the CLI right
>>>> somewhere.
>>>>
>>>> The character \xf1 corresponds to the small N with tilde in Jose's last
>>>> name.
>>>>
>>>> I'm going to look into it, but I don't think it's related to the
>>>> localization patches.
>>>>
>>>> Pavel
>>>
>>> I'm seeing 2 test failures:
>>>
>>>
>>> ======================================================================
>>> FAIL: Test the `ipalib.plugable.Plugin.__init__` method.
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>> File "/usr/lib/python2.7/site-packages/nose/case.py", line 186, in
>>> runTest
>>> self.test(*self.arg)
>>> File
>>> "/home/rcrit/redhat/freeipa-tests/tests/test_ipalib/test_plugable.py",
>>> line 237, in test_init
>>> assert o.summary == 'Do sub-classy things.'
>>> AssertionError
>>>
>>> ======================================================================
>>> FAIL: Test gettext translation
>>> ----------------------------------------------------------------------
>>> Traceback (most recent call last):
>>> File "/usr/lib/python2.7/site-packages/nose/case.py", line 186, in
>>> runTest
>>> self.test(*self.arg)
>>> File "/home/rcrit/redhat/freeipa-tests/tests/test_ipalib/test_text.py",
>>> line 122, in test_gettext
>>> assert(translated[0] != prefix)
>>> AssertionError
>>>
>>> patch 81 is probably going to need a rebase. I was able to get it
>>> applied with a 3-way merge and one conflict in internal.py.
>>>
>>> rob
>>
>> Rebased patch 81 and 83 (pygettext).
>>
>> Created a new patch to fix these latest test failures - it was easier
>> than doing a complex rebase.
>>
>> All latest versions of localization patches are attached to this email
>> for review.
>>
>> I tried to apply them on a clean master clone, build RPMs, installed and
>> run all unit tests. So hopefully, we're finally going to get this in. :)
>>
>> Pavel
>
> New version of the last patch (84) attached. It includes new tests for
> i18n like switching languages. Testing with install/po/test_i18n.py was
> also updated.
>
> I retested all the patches on a clean master again and everything seems
> to work great.
>
> Pavel

Ack x 8. This looks good, thanks for your patience and persistence.

I'll push these in the morning, I want to be careful that I push the 
right ones.

rob




More information about the Freeipa-devel mailing list