It appears to me that I can't have german umlauts (or any other
non-ascii chars for that matter) on buttons, for example ("Ändern"
 - with A umlaut - ist german for "Change"):

    # -*- coding: utf-8 -*-

    ...

    class MyDisplayForm(form.Form):

      ...

      @button.buttonAndHandler(u'Ändern')
      def change(self, action):
          self.request.response.redirect('edit')

tons of error msgs:

      ...
      File "/home/reuleaux/work/adrn/src/adrn/browser/views.py", line 489, in ?
        class MyDisplayForm(form.Form):
      File "/home/reuleaux/work/adrn/src/adrn/browser/views.py", line 491, in 
MyDisplayForm
        @button.buttonAndHandler(u'Ändern')
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/button.py", line 181, in 
buttonAndHandler
        f_locals['buttons'] += Buttons(button)
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/button.py", line 83, in 
__init__
        arg.__name__ = util.createId(arg.title)
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/util.py", line 33, in 
createId
        return name.encode('hex')
      File "encodings/hex_codec.py", line 24, in hex_encode
    zope.configuration.xmlconfig.ZopeXMLConfigurationError: File 
"/home/reuleaux/work/adrn/parts/adrbuch/site.zcml", line 4.0-4.42
        ZopeXMLConfigurationError: File 
"/home/reuleaux/work/adrn/src/adrn/app.zcml", line 86.2-86.28
        ZopeXMLConfigurationError: File 
"/home/reuleaux/work/adrn/src/adrn/configure.zcml", line 27.2-27.32
        ZopeXMLConfigurationError: File 
"/home/reuleaux/work/adrn/src/adrn/browser/configure.zcml", line 40.2-40.27
        ZopeXMLConfigurationError: File 
"/home/reuleaux/work/adrn/src/adrn/browser/av/configure.zcml", line 14.2
        UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in 
position 0: ordinal not in range(128)

I get similar errors at runtime (when rendering the form) if I try to
change the title of an existing button:

    class AdrEditForm(form.EditForm):

        ...

        buttons=form.EditForm.buttons
        # save changes
        buttons['apply'].title=u'Änderungen speichern'

this gives me:

    Traceback (most recent call last):
      File 
"/home/reuleaux/z3eggs/tmp-nK7Ng/zope.publisher-3.5.0a1.dev_r78838-py2.4.egg/zope/publisher/publish.py",
 line 133, in publish
      File 
"/home/reuleaux/z3eggs/tmp1LrliP/zope.app.publication-3.4.0a1_2-py2.4.egg/zope/app/publication/zopepublication.py",
 line 167, in callObject
      File 
"/home/reuleaux/z3eggs/tmp-nK7Ng/zope.publisher-3.5.0a1.dev_r78838-py2.4.egg/zope/publisher/publish.py",
 line 108, in mapply
       - __traceback_info__: <security proxied z3c.pagelet.zcml.AdrEdit 
instance at 0xb6d1928c>
      File 
"/home/reuleaux/z3eggs/tmp-nK7Ng/zope.publisher-3.5.0a1.dev_r78838-py2.4.egg/zope/publisher/publish.py",
 line 114, in debug_call
      File "/home/reuleaux/work/adrn/src/adrn/browser/views.py", line 636, in 
__call__
        self.update(**kw)
      File "/home/reuleaux/work/adrn/src/adrn/browser/views.py", line 692, in 
update
        self.form.update()
      File "/home/reuleaux/work/adrn/src/adrn/browser/views.py", line 334, in 
update
        super(AdrEditForm, self).update()
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/form.py", line 183, in 
update
        self.updateActions()
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/form.py", line 179, in 
updateActions
        self.actions.update()
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/button.py", line 229, in 
update
        buttonAction = zope.component.getMultiAdapter(
      File 
"/home/reuleaux/z3eggs/tmpxWsYeR/zope.component-3.4.0a1-py2.4.egg/zope/component/_api.py",
 line 101, in getMultiAdapter
      File 
"/home/reuleaux/z3eggs/tmpxWsYeR/zope.component-3.4.0a1-py2.4.egg/zope/component/_api.py",
 line 114, in queryMultiAdapter
      File 
"/home/reuleaux/z3eggs/tmpxWsYeR/zope.component-3.4.0a1-py2.4.egg/zope/component/registry.py",
 line 206, in queryMultiAdapter
      File 
"/home/reuleaux/z3eggs/tmpiBfeIG/zope.interface-3.4.0-py2.4-linux-i686.egg/zope/interface/adapter.py",
 line 482, in queryMultiAdapter
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/button.py", line 191, in 
__init__
        action.Action.__init__(self, request, field.title)
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/action.py", line 60, in 
__init__
        name = util.createId(title)
      File "/home/reuleaux/tmp/z3c.form/src/z3c/form/util.py", line 33, in 
createId
        return name.encode('hex')
      File "encodings/hex_codec.py", line 24, in hex_encode
      UnicodeEncodeError: 'ascii' codec can't encode character u'\xc4' in 
position 0: ordinal not in range(128)

Two points to note:

* I don't want to introduce i18n just for the buttons

      @button.buttonAndHandler(_(u'Change'))

  My app is german only and if I was to introduce i18n I would still
  make german the primary language and English the second,
  i. e. I would still want

      @button.buttonAndHandler(_(u'Ändern'))

* This caused me no problems in formlib, there I could do e. g.

      @action(u'Aendern')
      def aendern(self, action, data):
          self.request.response.redirect('edit')

      actions[u'actions.aendern'].label=u'Ändern'


      @action(u'Loeschen')
      def loeschen(self, action, data):
          ...

      actions[u'actions.loeschen'].label=u'Löschen'

  This is the last show stopper of z3c.form for me:
  I promise I will stop lamenting about features of formlib
  not found in z3c.form once I get this fixed.

Did I overlook something here - some easy workaround maybe?


-Andreas
_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to